题目大意:          让你输入n,然后求出n里面可以拆分为多少对素数的和(两个素数可以是相同的)。 解题思路:           先把素数打表,然后用素数筛选法得结果。
#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<
posted on 2011-11-07 00:20  cchun  阅读(244)  评论(0编辑  收藏  举报