hdu 2138 How many prime numbers(miller_rabin?)
How many prime numbers |
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 3302 Accepted Submission(s): 1074 |
Problem Description
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 |
Author
wangye
|
Source
HDU 2007-11 Programming Contest_WarmUp
|
Recommend
威士忌
据说得用miller_rabin算法,但我用用了筛选,900多MS,猥琐的过了
一个数只要不能被小于其方根的质素整除即为质素
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define N 65537 using namespace std; int f[N]; bool s[N]; int next=0; void oprime() { memset(s,0,sizeof(s)); s[0]=s[1]=1; int i,j; for(i=2;i<N;i++) { if(!s[i]) { f[++next]=i;//记录素数 for(j=i+i;j<N;j+=i) s[i]=1; } } } int main() { int m; int ans; oprime(); while(scanf("%d",&m)!=EOF) { ans=0; for(int i=0;i<m;i++) { __int64 shu; scanf("%I64d",&shu); bool flag=0; if(shu==1) continue; for(int j=1;j<next&&int(sqrt(shu)+1)>f[j];j++) { if(shu%f[j]==0) { flag=1; break; } } if(!flag) ans++; } printf("%d\n",ans); } } |
The article write by nealgavin