Cod sursa(job #318866)

Utilizator funkydvdIancu David Traian funkydvd Data 29 mai 2009 19:25:57
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#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;
}