| Catalinutz92 a întrebat:

DAU FUNDA! Cine le are la Informatica C++?

Nu stiu cum determini numarul elementelor prime dintr-un vector ( v[30] ) in c++. Ma poate ajuta cineva? Funnndaaa!

39 răspunsuri:
| CM7YRE a răspuns:

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.

Răspuns utilizator avertizat
Răspuns utilizator avertizat
Răspuns utilizator avertizat
| bruuu a răspuns:

#include
void main()
{int numar, i, s;
s=0;
coutnumar;
for(i=1; i

| CaffeBoy a răspuns:

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

Răspuns utilizator avertizat
| CaffeBoy a răspuns (pentru SexoasaTha):

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

Răspuns utilizator avertizat
Răspuns utilizator avertizat
| CaffeBoy a răspuns (pentru SexoasaTha):

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.

| CaffeBoy a răspuns (pentru CaffeBoy):

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

Răspuns utilizator avertizat
| CaffeBoy a răspuns (pentru SexoasaTha):

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))

Răspuns utilizator avertizat
| CaffeBoy a răspuns (pentru SexoasaTha):

Da

Răspuns utilizator avertizat
| CaffeBoy a răspuns (pentru SexoasaTha):

Daca tot n-ai inteles lasa-mi id-ul tau sa nu mai facem spam

| CaffeBoy a răspuns (pentru SexoasaTha):

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