Advertisement
AlexAvram

Untitled

Dec 4th, 2022
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. /*
  5. Ideea pe care am folosit-o e urmatoare:
  6. In cerinta iti zice ca un numar e aproape prim
  7. daca poate fii scris ca produsul de 2 numere naturale prime distincte.
  8. Deci numarul trebuie sa poata fii scris sub forma x=a^1*b^1. Unde a si b
  9. sunt factori primi ai lui x.
  10.  
  11. Asa ca am inceput sa descompun in factori primi numarul.
  12. Daca gasesc un factor prim la o putere mai mare de 1, numarul meu nu poate fi
  13. aproape prim deci returnez 0 si inchid programul.
  14. Iar daca la finalul programului, am numaratmai mult de 2 factori primi,
  15. inseamna tot ca nu poate fii aproape prim deci returnez 0 si inchid programul.
  16. */
  17. bool ap_prim(int a)
  18. {
  19.     short int cnt=0;
  20.     int d, pow=0;
  21.     d=2;
  22.     while (a%d==0)
  23.         a/=d, pow+=1;
  24.     if (pow>1) //verific daca puterea e buna
  25.         return 0;
  26.     else if (pow==1)
  27.         ++cnt;
  28.     d=3;
  29.     while (a>1)
  30.     {
  31.         pow=0;
  32.         while (a%d==0)
  33.             a/=d, pow+=1;
  34.         if (pow>1)
  35.             return 0;
  36.         else if (pow==1)
  37.             ++cnt;
  38.         d+=2;
  39.         if (a>1 && d*d>a)
  40.             d=a;
  41.     }
  42.     if (cnt==2) //verific numarul de factori primi
  43.         return 1;
  44.     else
  45.         return 0;
  46. }
  47. int main()
  48. {
  49.     short int n, cnt=0; int nr;
  50.     cin>>n;
  51.     short int i;
  52.     for (i=1; i<=n; ++i)
  53.     {
  54.         cin>>nr;
  55.         if (ap_prim(nr)==1)
  56.             ++cnt;
  57.     }
  58.     cout<<cnt;
  59.  
  60.     return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement