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

浙公网安备 33010602011771号