Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- int prim(int x)
- {
- int i;
- //functia prim verifica daca numarul primit ca parametru este sau nu prim. Si returneaza 1 daca e si
- //0 in caz ca nu este prim. La inceput fac o verificare pentru 3 si 2 pentru ca sunt prime, iar default cum
- //e scris alg. o sa afiseze ca nu sunt prime. Si scad posibilitatile.
- if(x==3||x==2)
- return 1;
- if(x%2==0)
- return 0;
- //aici elimin posibilittile ca numarul sa fie verificat daca se imparte la 2, pentru ca 50% din verificari o s fie
- //cu nr pare, care nu sunt prime.
- for(i=3;i<=sqrt(x);i+=2) //aici iau for de la 3 la radical din x(tu ai pus math.h da nu ai folosit biblioteca)
- if(x%i==0) //se poate si fara math.h, pui in loc de sqrt(x) un x/2;
- return 0; // practic daca nr se imparte la i, e clar ca nu e prim, si returnez zero.
- return 1; //daca a trecut de toate anterioare, e clar ca nr e prim, deci returnez 1.
- }
- int sumcif(int x)
- {
- //acesta subprogram calculeaza suma cifrelor numarului. si returneaza suma cifrelor numarului.
- int suma=0;
- while(x)
- {
- suma+=x%10;
- x=x/10;
- }
- return suma;
- }
- int main()
- {
- int m,n,i,start=1; long j=1;
- cout<<"N: " ;
- cin>>n;
- cout<<"M: " ;
- cin>>m;
- //iau for-ul de la 1 la n;
- for(i=1;i<n;i++)
- {
- for(;j<3200000;j++) //vezi mai jos
- if(prim(j)==1&&sumcif(j)<m)
- {cout<<j<<" "; j++; break;}
- /*se utilizeaza for(;;) daca vrei sa nu reinitializezi parametrii. Gen eu am vrut ca dupa ce reia primul for
- ala cu i=1, sa nu verifice iar j-ul de la 1 sa zicem, ca ar afisa mereu mereu aceleasi valori. Se poate daca vrei
- face cu o valoare, gen un max sa retii care e j-ul ultima data si sa fie gen for (j=max,j<....;j++) {max=j; if(.....){...};
- cam asa trebie implementat cu un max, dar se poate si fara cum am facut eu.
- Apoi verific daca j-ul este prim(prim(j)==1) si daca suma cifrelor lui j este mai mica decat m dat. daca sunt verificate conditiile
- afisez j-ul. Cresc j-ul cu o unitate pentru ca ii dau break. functia break preactic iese din for-ul cu j si revine la cel cu i.
- astfel e mai usor de observat cum se numara valorile de la 1 la N. Se putea si fara break, dar imi e teama ca nu mai intelegi ce scriu dupa
- */
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment