Pagini recente » Cod sursa (job #2600466) | Cod sursa (job #782784) | Cod sursa (job #986598) | Cod sursa (job #1981545) | Cod sursa (job #318866)
Cod sursa(job #318866)
#include<fstream.h>
//using namespace std;
ifstream f1 ("dk.in");
ofstream f2 ("dk.out");
int v[7],f;
int verif (int n)
{
if (n==2 || n==7|| n==61) return 1;
return 0;
}
long long mod(long long a, long long b, long long c)
{
long long sol=1;
while (b)
{
if(b%2) sol=(sol*a)%c;
a=(a*a)%c;
b/=2;
}
return sol;
}
void prim (int x)
{
int cx,s=0,d,r,l=1,f1,f2,i,j;
cx=x-1;
while (cx>0 && cx%2==0) {cx/=2; s++; l*=2;}
f=1;
d=x/l;
for (l=1; l<=2; l++)
{
f1=0; f2=1;
r=1;
if (mod(v[l],d,x)!=1) f1=1;
for (j=0; j<s; j++)
{
if (mod(v[l],r*d,x)==x-1) {f2=0; }
r*=2;
}
if (f1+f2==2) {f=0; break;}
}
}
int main()
{
int n,k,nr=0,i;
char c;
f1>>n;
v[1]=2; v[2]=3;
f1.get(c);
for (i=1; i<=n; i++)
{
k=0;
while (f1.get(c) && int(c)>=48) k=k*10+(int(c)-48);
if (k==2||k==3) nr++; else
if (k%2==1) { prim(k); if (f==1) nr++;}
}
f2<<nr;
return 0;
}