Newsgroup: it.comp.lang.c
Titolo: AIUTO RAGAZZI!!!

ho un problema a cui non riesco a ovviare.
Vi invio queste poche righe:
int u,i,j;
printf("Inserisci un numero intero e ti dico se è primo");
scanf("%d",&n);
for (i=2;i<=n-1;i++)
if ((n%i)=0)
j++;
quando compilo mi dice "lvalue required in function main()" alla riga del
for.
Io sono newbie e non so cosa sia lvalue...ma non capisco perchè non mi
faccia quell'operazione.

 if ((n%i)=0)
cosi' e' un'assegnazione.
il confronto si fa con ==


sarà anche bene che tu inizializzi j !

if ((n%i)=0)
if ( (n%i) == 0 )
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 printf("Inserisci un numero intero e ti dico se č primo");



Il test va scritto:
if ( (n%i) == 0)
(n%i)=0 è una assegnazione che, a sinistra del segno uguale, richiede una
variabile e non una espressione.
HTH gfb

 > for (i=2;i<=n-1;i++)
e poi scusa..
mica e' il caso di arrivare fino a n-1
tipo se hai n=13
e' ovvio che se ti risulta primo fino a i=6 lo sara' e basta
non c'e' bisogno di dividere per 7,8,9,10,11,12
e con qualche accorgimento puoi ridurre di molto i calcoli
ciau

il fatto è che mi servrebbe un goto...solo che il mio prof non vuole che si
usi il goto.Se hai qualche altro modo per uscire dal ciclo
mandamelo.Comunque GRAZIE!
<f...@foo.foo> ha scritto nel messaggio
news:MPG.152818e7f...@news.galactica.it...


...


news:MPG.152818e7f...@news.galactica.it...


la tua intuizione mi è stata molto d'aiuto...non ci sarei arrivato mai.
"Alex" <Nom...@wow.boh> ha scritto nel messaggio
news:a3ov6.23772$dJ6.2...@news.infostrada.it...


           for (i=3;i<=sqrt(n);i+=2){
se vuoi ottmizzare anche la velocita' non eseguire sqrt(n) in loop, tanto
per ogni ciclo dara' sempre lo stesso risultato, perdento tanto, ma tanto
tempo a fare i conti in double, e confronti con "i" convertito in double.
Meglio:
int limite=sqrt(n);
...
for( i=3;i<=limite;i+=2)
ciao
donCiccio

...


Ti consiglio anche di guardare il messaggio di donCiccio che mi fa
giustamente notare che e' inutile scrivere : for (i=3;i<=sqrt(n);i+=2)
facendo di fatto esrguire sqrt(n) ad ogni esecuzione di ciclo.
meglio (subito dopo la scanf) scrivere : int sqrt_of_n = sqrt(n); e usare
quindi : for (i=3;i<=sqrt:_of_n;i+=2) .
L'ordine di grandezza rimane lo stesso, quindi probabilmente per un
professore universitario i due programmi saranno identici, tuttavia la
costante k (per ogni ciclo) diminuisce e quindi alla fine hai un tempo
totale leggermente inferiore. Certo che anche calcolando sqrt(n) ad ogni
ciclo il tempo era gia' ottimo.
Modificando il programma in questo modo ottieni ottimi.
Alex
Andrea Richiardi ha scritto nel messaggio ...


Modificando il programma in questo modo ottieni ottimi.
Solo un appunto... perche' odiate tanto il 2 ? In fondo
anche lui e' un numero primo.
No. Nel caso vi fosse venuto il dubbio 1 *non* e' un
numero primo (per motivi tecnici).
Riguardo all'algoritmo e' interessante anche studiare
l'idea di Eratostene per trovare tutti i numeri primi
inferiori ad un massimo prefissato.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

...


mandamelo.Comunque GRAZIE!
per uscire dal ciclo usa break
per trovare se un numero č primo in maniera veloce usa il "crivello di
eratostene", anche se occupa tanta memoria rispetto al tuo metodo.
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688