问题描述
解决方案
你的jundge里面的循环有问题,你不能光比较k=2能不能整除就直接返回了,应该是
for (k=2;k<=x/2;k++)
{
if (x%k==0)
return 1;
}
return 0;
解决方案二:
http://blog.csdn.net/xianfajushi/article/details/25125133
解决方案三:
#include<stdio.h>
#include<math.h>
/// <summary>
/// 判断一个数是否是素数
/// </summary>
/// <param name="intNum">要判断的数</param>
/// <returns>如果是,返回true,否则,返回false</returns>
static bool IsPrimeNumber(int intNum)
{
bool blFlag = true; //标识是否是素数
if (intNum == 1 || intNum == 2) //判断输入的数字是否是1或者2
blFlag = true; //为bool类型变量赋值
else
{
int sqr =(int)(sqrt((double)intNum)); //对要判断的数字进行开方运算
for (int i = sqr; i >= 2; i--) //从开方后的数进行循环
{
if (intNum % i == 0) //对要判断的数字和指定数字进行求余运算
{
blFlag = false; //如果余数为0,说明不是素数
}
}
}
return blFlag; //返回bool型变量
}
/// <summary>
/// 判断一个数是否符合哥德巴赫猜想
/// </summary>
/// <param name="intNum">要判断的数</param>
/// <returns>如果符合,返回true,否则,返回false</returns>
static bool ISGDBHArith(int intNum)
{
bool blFlag = false; //标识是否符合哥德巴赫猜想
if (intNum % 2 == 0 && intNum > 6) //对要判断的数字进行判断
{
for (int i = 1; i <= intNum / 2; i++)
{
bool bl1 = IsPrimeNumber(i); //判断i是否为素数
bool bl2 = IsPrimeNumber(intNum - i); //判断intNum-i是否为素数
if (bl1 & bl2)
{
//输出等式
printf("%d=%d+%dn",intNum, i, intNum - i);
blFlag = true;
//break;
//符合哥德巴赫猜想
}
}
}
return blFlag; //返回bool型变量
}
void main()
{
int a=0;
printf("输入一个大于6的偶数:n");
scanf_s("%d",&a,10);
bool blFlag = ISGDBHArith(a); //判断是否符合哥德巴赫猜想
if (blFlag)
{
printf("%d能写成两个素数的和,所以其符合哥德巴赫猜想。",a);
}
getchar();
getchar();
}
时间: 2024-11-19 00:06:19