Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /*
- Ideea pe care am folosit-o e urmatoare:
- In cerinta iti zice ca un numar e aproape prim
- daca poate fii scris ca produsul de 2 numere naturale prime distincte.
- Deci numarul trebuie sa poata fii scris sub forma x=a^1*b^1. Unde a si b
- sunt factori primi ai lui x.
- Asa ca am inceput sa descompun in factori primi numarul.
- Daca gasesc un factor prim la o putere mai mare de 1, numarul meu nu poate fi
- aproape prim deci returnez 0 si inchid programul.
- Iar daca la finalul programului, am numaratmai mult de 2 factori primi,
- inseamna tot ca nu poate fii aproape prim deci returnez 0 si inchid programul.
- */
- bool ap_prim(int a)
- {
- short int cnt=0;
- int d, pow=0;
- d=2;
- while (a%d==0)
- a/=d, pow+=1;
- if (pow>1) //verific daca puterea e buna
- return 0;
- else if (pow==1)
- ++cnt;
- d=3;
- while (a>1)
- {
- pow=0;
- while (a%d==0)
- a/=d, pow+=1;
- if (pow>1)
- return 0;
- else if (pow==1)
- ++cnt;
- d+=2;
- if (a>1 && d*d>a)
- d=a;
- }
- if (cnt==2) //verific numarul de factori primi
- return 1;
- else
- return 0;
- }
- int main()
- {
- short int n, cnt=0; int nr;
- cin>>n;
- short int i;
- for (i=1; i<=n; ++i)
- {
- cin>>nr;
- if (ap_prim(nr)==1)
- ++cnt;
- }
- cout<<cnt;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement