德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对
Input
输入任意的>6的正偶数(<32767)
Output
试求给出的偶数可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对)
Sample Input
1234
Sample Output
25
#include<stdio.h>
#include<math.h>
int isSS(int x)
{
int i,flag=1; //是素数
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
{
flag=0;
break;
}
}
if(flag==1)
return 1;
else
return 0;
}
int main()
{
int n;
scanf("%d",&n);
int i,j,sum=0;
// for(i=2;i<=n/2;i++)//只用判断到n的一半是否为素数即可,因为剩下的素数对只是前后位置不同
// {
// if(isSS(i)==1)//i为素数
// {
// //判断n-i是否为素数
// if(isSS(n-i)==1)
// sum++;
// }
// }
for(i=3;i<=n/2;i+=2)//对上面的优化:偶数除了2是素数,其他都不是素数,且若一个数的因子为2,则这个数(已知这个数为偶数且大于6)的另一个因子一定为大于2的偶数,
{
if(isSS(i)==1)//i为素数
{
//判断n-i是否为素数
if(isSS(n-i)==1)
sum++;
}
}
printf("%d",sum);
return 0;
}
版权声明:本文为qq_42804678原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。