Pagini recente » Cod sursa (job #1558336) | Cod sursa (job #570796) | Cod sursa (job #291099) | Cod sursa (job #2343551) | Cod sursa (job #422322)
Cod sursa(job #422322)
#include <stdio.h>
#include <algorithm>
#define N 1000000009
#define P 400005
using namespace std;
int n,nr,s,d,numere[7];
long long exp2[32],a[P];
void precalcul2()
{
int i;
exp2[0]=1;
for (i=1; i<=30; i++)
exp2[i]=exp2[i-1]*2;
}
void desc(long long x)
{
s=0;
long long salv;
salv=x;
while (salv%2==0)
{
s++;
salv/=2;
}
d=salv;
}
long long ridic(long long n,long long p,long long nr)
{
long long rez=1;
n=n%nr;
while(p)
{
if (p%2)
rez=(long long)rez*n%nr;
n=n*n%nr;
p/=2;
}
return rez;
}
void precalcul()
{
numere[1]=2;
numere[2]=3;
//numere[3]=61;
//numere[4]=7;
//numere[5]=11;
//numere[6]=13;
}
char prim(long long x)
{
if (x==1)
return 0;
if (x==2 || x==3)
return 1;
if (x%2==0)
return 0;
desc(x-1);
int i,r,ok=0;
long long t;
for (i=1; i<=2; i++)
{
ok=0;
if (ridic(numere[i],d,x)==1)
ok=1;
else
for (r=0; r<=s-1; r++)
{
t=exp2[r];
t*=(long long)d;
if (ridic(numere[i],t,x)==x-1)
{
ok=1;
break;
}
}
if (ok==0)
return 0;
}
return 1;
}
int main()
{
freopen("dk.in","r",stdin);
freopen("dk.out","w",stdout);
scanf("%d",&n);
int i,bun=0;
precalcul();
precalcul2();
for (i=1; i<=n; i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
for (i=1; i<=n; i++)
{
if (a[i]==a[i-1])
if (bun)
nr++;
else
;
else
if (prim(a[i]))
{
nr++;
bun=1;
}
else
bun=0;
}
printf("%d\n",nr);
return 0;
}