Fa-ti o functie care testeaza daca un numar e prim,si aplici functia pe fiecare element din vector. Apoi iti iei un contor, si pui un if:
Daca functia determina ca e prim, contorul creste si trece la urmatorul element, daca nu, doar trece la urm. element.
Da-mi funda ca le am.
Nu e ideea cea mai eficienta
Practic n-ai nevoie de vector, presupunand ca ai un N citit de la tastatura si un vector cu N numere poti face direct de la citirea "vectorului" verificarea daca e prim dar daca tii sa scrii mai mult si sa-l faci si mai ineficient atunci il faci cu vector
Pt prim verifici daca nr e par, daca da, nu e prim altfel iei un contor de la 3 pana la radical din nr cu pas2 (pentru a elimina contorul pozitiv) si incepi sa verifici daca nr tau se imparte la contor
Daca numarul nu s-a impartit la contor atunci incrementezi o variabila pe care o afisezi la sfarsit.
Ideea ar fi cam asa:
int p(int x)
{int i; if(! x%2)return 0; for(i=3; i>n;
for(i=0; i>x; v[i]=x; }
for(i=0; i
Daca x este par (restul impartirii la 2 = 0) functia returneaza 0 (fals)
Asa ar fi cea mai eficienta metoda pentru ca la:
x= 1, 000, 000, 001
metoda cu "pentru i=2, n dc x mod i = 0 return 0" parcurge 1, 000, 000, 000 iar cu sqrt parcurge 32 mii si metoda mea doar 15 mii
M-am uitat si pe sursa lui raindrops, daca obs trebuie sa pa rcurga pentru x de mai sus, 1 miliard de numere, atribuiri si comparatii. ( pentru i=1 i
Am testat
Daca spui ca se imparte la 7 bine, ideea era ca un nr ff mare prim ar dura mult sa-l verifice.
Daca faci c++ am sa-ti dau o sursa in limbajul de programare s-o testezi ca sa vezi si faza cu functia:
Pentru x = 330000067 pe sursa mea (http://pastebin.com/2nNj9730) am stat mai putin de 1 secunda pentru rezultat, pe sursa lui raindrops (http://pastebin.com/s4yvqvxt) pe acelasi x am stat lejer 6 minute.
Testeaza si vei vedea diferenta.
E de mentionat si urmatorul lucru :
Executarea unui program decurge mai rapid daca nu trebuie apelate functii si toate variabilele sunt locale (se lucreaza mai greu cu cele global) (!)SI functiile de i/o sa fie in C nu in C++ (C lucreaza mai rapid) asta pentru timp de executie mai mic
Asa e, daca modifici in if( (x%2)==0 && x>2 ) atunci pentru x=2 iti arata ca e prim (ca sa te simti bine)
Si aia cu int i este tot un lucru minor, il faci long int si gata (long long nu are rost pentru ca merge pana la sqrt (asta asa ca sa economisesti si memorie))
Da
Daca tot n-ai inteles lasa-mi id-ul tau sa nu mai facem spam
Da, dar daca observi, cu sau fara, tot imi rezolva problema in mai putin de 0 secunda.
Oricum observatia e buna, dar atata timp cat am scos 6 minute din sursa precedenta este irelevant faptul ca se recalculeaza un radical totul facandu-se in