Oppure

Loading
02/02/09 11:05
wicca89
Ho un esercizio che dice: dato un numero scrivere una funzione che controlla se il numero inserito è primo. poi utilizzando la funzione appena realizzata scrivere un programma che fato un numero intero visualizzi a video tutti i numeri primi minori o uguali a quello dato.
Il mio problema è la seconda parte cioè quella di stampare a video tutti i numeri primi minori o uguali a quello dato. Posto il codice che ho scritto fin'ora:

#include<stdlib.h>
#include<stdio.h>

int primo(int n) {
    if(n/n & n/1)
     {
            printf("Il numero %d inserito e' primo \n",n);
            }
    else 
            printf("Il numero %d inserito non e' primo \n",n);
            
            return n;
            }
    
int verifica(int n) {
    int i;
    
    for (i=1;i<n;i++)
     {
     if(n/n & n/1)
    printf("i numeri primi fino al numero inserito sono: %d \n",i);
}
    return n;
}
    
int main () {
    int n,i;
    
    printf("Calcolo numeri primi \n");
    printf("Inserisci un numero: ");
    scanf("%d",&n);
    
    printf("",primo(n));
    printf("",verifica(n));
    
system ("pause");
return 0;
}
Ultima modifica effettuata da wicca89 02/02/09 13:13
aaa
02/02/09 13:07
gioser
postresti modificare il post e mettere il sorgente in un blocco "Code"?
aaa
02/02/09 13:14
wicca89
fatto :P:D
aaa
02/02/09 13:21
gioser
ma è la stessa domanda che hai già postato sul forum del C++?
aaa
02/02/09 13:31
wicca89
no! Facendo programmazione in c il forum del c++ non l'ho mai neanche aperto :D.
aaa
02/02/09 16:38
Overflow
un numero si dice primo se è solo se è divisibile per 1 e per se stesso. Nel tuo algoritmo hai scritto, se non sbaglio:

if(n/n && n/1)
/*numero primo*/

4 non è un numero primo quindi, 4/4 è vero,e 4/1 è vero, risulta che 4 è primo.

Devi verificare se n non è divisibile prima per gli altri numeri primi:

int primo(int n)
{
int i=2;
int num = n;

while(n>1)
{
while((n %i)==0)
{
 n/=i;
}
i++;
}

if(--i == num)/* il numero è primo*/
 return 1;
return 0;
}


non l'ho testata, dovrebbe funzionare...
int main()
{
/* prendiamo come numero base 8*/
int i;
for(i=0;i<=8;i++)
{
 if(primo(i))
printf("Il numero %d è primo", i);
}

return 1;
}


dalla main chiami la funzione primo() e li passi i numeri che vanno da 0 a base(nel nostro caso 8).
Potrebbero esserci errori, perchè al momento non posso testare il codice.
aaa
02/02/09 17:12
wicca89
mi sono permessa di apportare alcune modifice al codice per la mia traccia e funziona!! Grazieee!!!

#include<stdlib.h>
#include<stdio.h>

int primo(int n)
{
int i=2;
int num = n;

while(n>1)
{
while((n %i)==0)
{
n/=i;
}
i++;
}

if(--i == num)/* il numero è primo*/
return 1;
return 0;
} 


int main () {

int i,n;

printf("Inserisci un numero: ");
    scanf("%d",&n); 
for(i=0;i<=n;i++)
{
if(primo(i))
printf("Il numero %d e' primo \n", i);
}

system ("pause");
return 0;
}
aaa
03/02/09 21:09
eddiewrc
se cerchi nei programmi disponibili sul sito, ce ne è uno che appunto trova tutti i numeri primi in tempo O(n^0.5) scritto in c
aaa