Millar Rabin
题意:
给定n个数,判断这n个数中有多少个素数
code:
#include<bits/stdc++.h>
using namespace std;
int ppow(int a,int b,int mod){
int ans=1%mod;a%=mod;
while(b){
if(b&1)ans=1LL*ans*a%mod;
a=1LL*a*a%mod;
b>>=1;
}
return ans;
}
bool Millar(int p){
if(p==1)return 0;
int t=p-1,c=0;
while(t%2==0)t/=2,c++;
for(int i=0;i<5;i++){
int rd=rand()%p+rand();//随机一个底数
int a=ppow(rd,t,p),last=a;
for(int j=1;j<=c;j++){
last=1LL*a*a%p;
if(last==1&&a!=1&&a!=p-1)return 0;
a=last;
}
if(a!=1)return 0;
}
return 1;
}
signed main(){
int n;while(cin>>n){
int ans=0;
for(int i=1;i<=n;i++){
int x;cin>>x;
if(Millar(x))ans++;
}
cout<<ans<<endl;
}
return 0;
}