Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Algoritm numar prim
Last Updated: Oct 29 2009 21:49, Started by
cr1s71_13
, Oct 28 2009 16:14
·
0
#1
Posted 28 October 2009 - 16:14
E vorba despre un subprogram, nu imi mai aduc foarte bine aminte problema, cerea sa se verifice daca un numar este prim.
int prim (int x) { int i, y=0; for (i=2;i<=x/2;i++) if (x%i!=0) y=1; return y; } Stiu ca mai e o posibilitate, atunci cand consideram numarul prim, il initializam cu 1 si scriem if (x%i==0) ... y=1; Ma intereseaza doar daca rezolvarea facuta de mine este corecta |
#2
Posted 28 October 2009 - 16:18
da, merge , dar asa
[b]int[/b] prim (int x) { [b]int[/b] i, y[b]=[/b]1; // presupui ca numarul e prim for (i=2;i<=x/2;i++) if (x%i[b] ==[/b]0) { y=0; break;} // am gasit deja un divizor, nu are sens sa continuam return y; // intoarcem 1 sau 0 } Edited by msmihai, 28 October 2009 - 16:20. |
#3
Posted 28 October 2009 - 16:20
In exemplul dat de tine, orice numar < 5 ai introduce, iti returneaza 1.
int prim (int x) { int i, y=1; for (i=2;i<=sqrt(x);i++) //daca numarul este prim, dupa radical din nr nu mai gaseste sigur nimic. if (x%i==0) y=0; return y; } msmihai a fost mai rapid. Edited by SoR!n, 28 October 2009 - 16:23. |
#4
Posted 28 October 2009 - 20:27
Multumesc mult !
Da, stiam faza cu "presupui ca numarul este prim ..." dar ma interesa doar daca cum am zis eu e corect, am gandit exact invers: presupunem ca numarul nu este prim, si apoi daca nu gasim niciun divizor returneaza valoarea 1. |
#5
Posted 29 October 2009 - 15:32
sau mai elegant si mai scurt:
int prim(int x) { for(int i = 2; i <= sqrt(x); i++) if(i % 2 > 0 && x % i == 0) return 1; return 0; } Edited by Ph@ntom, 29 October 2009 - 15:33. |
#6
Posted 29 October 2009 - 16:54
#7
Posted 29 October 2009 - 21:08
era gresita solutia care am dat-o ma scuzati,trebuia:
int prim(int x) { for(int i = 2; i <= int(sqrt(x)); i++) if(x % i == 0) return false; return true; } Edited by Ph@ntom, 29 October 2009 - 21:08. |
#8
Posted 29 October 2009 - 21:20
nu era gresit, NumeDeCod zicea ca in loc de i <= sqrt(x) ar fi mai bine sa folosesti i*i<=x, evitand astfel apelul functiei sqrt() de multe ori.
|
#9
Posted 29 October 2009 - 21:40
Nu ar fi mai eficient daca am adauga o conditie ca atunci cand intalneste primul numar cu care este divizibil, programul sa se opreasca?
adik ceva de genul: int prim(int x) {int i,[b]p=1[/b]; if (x==0 || x==1) p=0; \\asta ma rog nu prea conteaza for(int i = 2; i <= int(sqrt(x)) [b]&&p[/b]; i++) if(x % i == 0) p=0; return p; } Apropo. Salut, tuturor. Sunt nou pe forum . |
#10
Posted 29 October 2009 - 21:46
int Prim(long n) { long i; if(n==1||n==0) return 0; if(n>2&&n%2==0) return 0; for(i=3;i*i<n;i=i+2) if(n%i==0) return 0; return 1; } |
|
#11
Posted 29 October 2009 - 21:49
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users