Guest User

Untitled

a guest
Jan 7th, 2016
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. int prim(int x)
  5. {
  6. int i;
  7. //functia prim verifica daca numarul primit ca parametru este sau nu prim. Si returneaza 1 daca e si
  8. //0 in caz ca nu este prim. La inceput fac o verificare pentru 3 si 2 pentru ca sunt prime, iar default cum
  9. //e scris alg. o sa afiseze ca nu sunt prime. Si scad posibilitatile.
  10. if(x==3||x==2)
  11. return 1;
  12. if(x%2==0)
  13. return 0;
  14. //aici elimin posibilittile ca numarul sa fie verificat daca se imparte la 2, pentru ca 50% din verificari o s fie
  15. //cu nr pare, care nu sunt prime.
  16. 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)
  17. if(x%i==0) //se poate si fara math.h, pui in loc de sqrt(x) un x/2;
  18. return 0; // practic daca nr se imparte la i, e clar ca nu e prim, si returnez zero.
  19. return 1; //daca a trecut de toate anterioare, e clar ca nr e prim, deci returnez 1.
  20.  
  21. }
  22. int sumcif(int x)
  23. {
  24. //acesta subprogram calculeaza suma cifrelor numarului. si returneaza suma cifrelor numarului.
  25. int suma=0;
  26. while(x)
  27. {
  28. suma+=x%10;
  29. x=x/10;
  30. }
  31. return suma;
  32. }
  33. int main()
  34. {
  35. int m,n,i,start=1; long j=1;
  36. cout<<"N: " ;
  37. cin>>n;
  38. cout<<"M: " ;
  39. cin>>m;
  40. //iau for-ul de la 1 la n;
  41. for(i=1;i<n;i++)
  42. {
  43. for(;j<3200000;j++) //vezi mai jos
  44. if(prim(j)==1&&sumcif(j)<m)
  45. {cout<<j<<" "; j++; break;}
  46. /*se utilizeaza for(;;) daca vrei sa nu reinitializezi parametrii. Gen eu am vrut ca dupa ce reia primul for
  47. 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
  48. 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(.....){...};
  49. cam asa trebie implementat cu un max, dar se poate si fara cum am facut eu.
  50. 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
  51. 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.
  52. 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
  53.  
  54.  
  55. */
  56. }
  57. return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment