F - 分拆素数和

把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input

输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

Output

对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。

Sample Input

30
26
0

Sample Output

3
2

AC代码如下:

#include<stdio.h>
#include<string.h>
int cal(int x)// pan duan su shu
{
	int i;
	for(i=2;i*i<=x;i++)
	{
		if(x%i==0)	return 0;
	}
	return 1;
}
int a[10001],b[10001];
int main()
{
	int i,n,x,t=0,sum,k,j,z;
	for(i=2;i<=10000;i++)
	{
		if(cal(i))	
		{
			a[t]=i;
			t++;
		}
	}  //su shu cun chu

	while(scanf("%d",&n)&&n)
	{
		z=0;
		sum=0;
		memset(b,0,sizeof(b));
		for(i=0;i<t;i++)
		{
			if(a[i]<n)
			{
				b[z]=a[i];
				z++;
			}
			if(a[i]>=n)	break;
		}
	
		for(i=0;i<z-1;i++)
		{
			for(j=i+1;j<z;j++)
			{
				if(b[i]+b[j]==n) sum++;
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/doubleguy/article/details/81115793