(已解决)
#include<stdio.h>#include<stdlib.h>
#include<time.h>
//判断结果是否为素数,是素数返回1,否则返回0
int isPrime(int i)
{
int n, flag = 1;
if (1 == i)
{
return 0;
}
for (n = 2; n < i; n++)
{
if (i % n == 0)
{
flag = 0;
break;
}
}
if (1 == flag)
{
return 1;
}
else
{
return 0;
}
}
//判断偶数X是否符合哥德巴赫猜想,符合返回1,不符合返回0
int isGoldbach(int x)
{
int i, flag = 0;
for (i = 1; i < x / 2; i++)
{
if (isPrime(i) && isPrime(x - i)) //如果i和i-1都为素数,则符合条件,标记然后退出循环
{
flag = 1;
printf("%d = %d + %d", x, i, x - i);
break;
}
}
if (1 == flag)
{
return 1;
}
else
{
return 0;
}
}
//在low和high范围验证哥德巴赫猜想
int testGB_s(int low, int high)
{
int i, j = 0;
int flag = 0;
for (i = low; i < high; i++)
{
if (i % 2 == 0 && i>2)
{
if (isGoldbach(i))
{
j++;
if (5 == j)
{
printf("\n");
j = 0;
}
}
else
{
flag = 0;
break;
}
}
}
if (i == flag)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
clock_t start = 0, finish = 0;
double duration = 0.00;
start = clock();
int low, high;
printf("请输入两个数来验证哥德巴赫猜想,数的范围为low-high\n");
printf("low: ");
scanf_s("%d", &low);
printf("\nhigh: ");
scanf_s("%d", &high);
if (testGB_s(low, high))
{
printf("在%d和%d的范围内,所有的偶数都能分解成两个质数相加,哥德巴赫猜想成立\n", low, high);
}
else
{
printf("在%d和%d的范围内,不是所有的偶数都能分解成两个质数相加,哥德巴赫猜想不成立\n", low, high);
}
/* 测量这个事件持续的时间*/
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("整个验证过程所用时间为%f seconds\n", duration);
system("pause");
}
结果老是验证不成立..各位大侠们看看
[ 本帖最后由 东林石头 于 2014-1-27 14:09 编辑 ]