您的位置:首页 > 其它

hdu 2138 How many prime numbers

2013-03-19 10:31 190 查看
暴力过!

#include<iostream>
#include<cmath>

using namespace std;

int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
int count = 0;
while(n--)
{
int x;
scanf("%d", &x);

int i, j, k;
k = sqrt((double)x);
for( i=2; i <= k; )
{
if(x % i == 0)
break;
if(i % 2 == 1)
i += 2;
else
i++;
}
if(i > k)
count ++;
}
printf("%d\n", count);
}
return 0;
}
线性删选做的

时间跟暴力时间一样。。。。。啜泣死!



#include<iostream>
#include<cmath>
#define max_num 10000
using namespace std;

int flag_prime[max_num];
int prime[max_num/3];
int len=0;

void get_prime()
{
int i,j;
for(i=2;i<max_num;i++)
{
if(flag_prime[i] == 0)
prime[len++]=i;
for(j=0;j<len && i*prime[j]<max_num;j++)
{
flag_prime[i*prime[j]]=1;
if(i%prime[j] == 0)
break;
}
}
}

int main()
{
int n;
get_prime();
while(scanf("%d", &n) != EOF)
{
int count = 0;
while(n--)
{
int x;
scanf("%d", &x);

int i, j, k;
if(x <= max_num)
count += flag_prime[x] == 1 ? 0:1;
else
{
k = sqrt((double)x);
for( i=2; i <= k; )
{
if(x % i == 0)
break;
if(i % 2 == 1)
i += 2;
else
i++;
}
if(i > k)
count ++;
}
}
printf("%d\n", count);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: