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

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

Si asa am transformat in chat.
In fine, m-am plictisit de o tampenie de prim.
Daca vrei sa stam la "taclale" de informatica arata-mi ceva interesant nu cum se verifica un nr prim (de clasa a5-a)

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

Da, mi se pare interesanta faza cu radicalul
Programul cu n nr prime din sirul lui fibonacci e usor de facut, dar in momentul de fata daca l-as face, l-as face ineficient (prima ideea ce mi-a venit fu sa pun fiecare nr din sir pe vector si sa-l afisez descrescator) dar probabil ca exista si o formula sa le gasesti descrescator.

Apropo de chestia cu prim, mai exista o formula ciudata (daca suntem la capitolul "interesant"):
if (!(x % (x-1)! + 1)) atunci x este prim

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

Am gasit intr-o carte de algoritmi sub numele de "Algoritmul lui Wilson" dar e cam ineficient si nu merge pe numere mari (are un factorial acolo)

Daca insisti cu fibonacci fa-l tu recursiv si eu pe vector si vedem care-i mai rapid.
De fapt cea mai usoara cale (cum sirul lui fibonacci nu merge prea extins pe long long int) este sa faci un vector initiat cu valorile din sir.

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

Nu stiu la ce te referi.
Ai spus numerele prime din sirul lui fibonacci afisate descrescator, eu doar atat am scris: http://pastebin.com/82XRa5ut

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

Nu, enuntul dat de tine spune clar sa afisezi numerele prime din sirul lui fibonacci in ordine descrescatoare. Nicidecum sa nu folosesc un vector prestabilit sau sa calculez intr-un mod anume numerele. Ai precizat "afisaza".
Dar asa cum am calculat acele numere din vector asa le pot pune in sursa si putem considera problema rezolvata (iar timpul de executie este sub 1s cu mult)