您的位置:首页 > 编程语言 > Go语言

HDU1397_Goldbach's Conjecture_素数筛选法

2011-11-07 00:20 295 查看
题目大意:
         让你输入n,然后求出n里面可以拆分为多少对素数的和(两个素数可以是相同的)。
解题思路:
          先把素数打表,然后用素数筛选法得结果。
[code]
#include
#include
using namespace std;
int p[8]={4,2,4,2,4,6,2,6};

int num[35000];
int Prime(int n)//判断素数
{
int i=7,j,q;
if(n==1)//1不是素数,也不是合数
return 0;
if(n==2||n==5||n==3)
return 1;
if(n%2==0||n%3==0||n%5==0)
return 0;
q=(int)sqrt((double)n);
for(;i<=q;)
{
for(j=0;j<8;j++)

{
if(n%i==0)return 0;
i+=p[j];
}
if(n%i==0)return 0;
}
return 1;
}

void initPrime()
{
memset(num,0,sizeof(num));
int end=(int)pow(2.0,15);
for(int i=1;i<=end;i++)
{
if(Prime(i))
num[i]=1;
}
}
int main(void)
{
int n;
initPrime();
while(cin>>n,n)
{
int count=0;
for(int i=1;i<=n/2;i++)
{
if(num[i] && num[n-i])
count++;
}
cout<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: