int aproape_prim(int n)
{
int d=2,k=0;
while(n>1)
if(n%d==0)
{
k++;
int e=0;
while(n%d==0)
{
e++;
n/=d;
}
if(e!=1) return 0;//nu are voie sa apara un exponent mai mare decat 1
}
else d++;
if(k==2) return 1;//trebuie exact 2 factori primi
else return 0;
}
sau (mai eficient)
int prim(int n)//verific numar prim
{
if(n<2) return 0;
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
int a_prim(int n)
{
int d=2;
while(n%d!=0 && d*d<n) d++; //caut primul divizor
if(n%d!=0) return 0;
if(prim(n/d) && d!=n/d) return 1; //daca n/d este si el prim si n!=n/d
else return 0;
}
|