Give you a lot of positive integers, just to find out how many prime numbers there are.
Input
There are a lot of cases. In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit signed integer, and each of them won’t be less than 2.
Output
For each case, print the number of prime numbers you have found out.
Sample Input
3
2 3 4
Sample Output
2
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long quickpow(long long a,long long b,long long m)
{
long long c=1;
while(b)
{
if(b%2) c=(c*a)%m;
a=(a*a)%m;
b/=2;
}
return c;
}
bool Miller_Rabin(long long x,long long n)//选取x为底,判定n是否可能为素数
{
long long y=n-1;
while(!(y&1)) y>>=1;
x=quickpow(x,y,n);//略去n-1(=d*2^s)右端连续的0,将其调整为d
while(y<n-1&&x!=1&&x!=n-1)//x=x^d mod n
x=(x*x)%n,y<<=(long long )1;//将x反复平方,直到模数值出现n-1或1为止
return x==n-1||y&1==1; //若x为n-1或y为奇数,则n可能为素数,否则一定不是
}
bool sushu(long long n)
{
if(n==2||n==7||n==61) return 1;
if(n==1||!(n%2)) return 0;
return Miller_Rabin(2,n)&&Miller_Rabin(7,n)&& Miller_Rabin(61,n);
}
int main()
{
long long n,tmp,sum;
while(cin>>n)
{
sum=0;
while(n--)
{
cin>>tmp;
if(sushu(tmp))
sum++;
}
cout<<sum<<endl;
}
return 0;
}