(已经解决)感谢版主
本帖最后由 曾拥有的方向 于 2014-1-27 14:09 编辑#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, finish;
doubleduration;
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-26 21:53 编辑
时间貌似不太对啊..计算了好几个范围而且里面有错误 帮看看啊 是哪错了 本帖最后由 牡丹花下死做鬼 于 2014-1-27 12:38 编辑
代码有误代码见21楼 忘了写注释了 不好意思啊 牡丹花下死做鬼 发表于 2014-1-26 23:07 static/image/common/back.gif
忘了写注释了 不好意思啊
万分感谢版主哈... 牡丹花下死做鬼 发表于 2014-1-26 23:07 static/image/common/back.gif
忘了写注释了 不好意思啊
1>------ 已启动生成:项目: Goldbach conjecture, 配置: Debug Win32 ------
1>源.cpp
1>i:\练习代码\goldbach conjecture\goldbach conjecture\源.cpp(13): error C4996: 'setbuf': This function or variable may be unsafe. Consider using setvbuf instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(292) : 参见“setbuf”的声明
1>i:\练习代码\goldbach conjecture\goldbach conjecture\源.cpp(88): error C2668: “sqrt”: 对重载函数的调用不明确
1> d:\program files (x86)\microsoft visual studio 12.0\vc\include\math.h(1251): 可能是“long double sqrt(long double) throw()”
1> d:\program files (x86)\microsoft visual studio 12.0\vc\include\math.h(1135): 或 “float sqrt(float) throw()”
1> d:\program files (x86)\microsoft visual studio 12.0\vc\include\math.h(521): 或 “double sqrt(double)”
1> 尝试匹配参数列表“(long)”时
========== 生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
报错了啊 版主 曾拥有的方向 发表于 2014-1-26 23:24 static/image/common/back.gif
1>------ 已启动生成:项目: Goldbach conjecture, 配置: Debug Win32 ------
1>源.cpp
1>i:\练习代 ...
你怎么建的是C++源文件??? 曾拥有的方向 发表于 2014-1-26 23:24 static/image/common/back.gif
1>------ 已启动生成:项目: Goldbach conjecture, 配置: Debug Win32 ------
1>源.cpp
1>i:\练习代 ...
VC++6.0 亲测 OK 牡丹花下死做鬼 发表于 2014-1-26 23:27 static/image/common/back.gif
你怎么建的是C++源文件???
哦哦 我新建忘改后缀了..不过还是报错一个 关于setbuf的引用问题.我的是VS2013
1>------ 已启动生成:项目: Goldbach conjecture, 配置: Debug Win32 ------
1>源.c
1>i:\练习代码\goldbach conjecture\goldbach conjecture\源.c(13): error C4996: 'setbuf': This function or variable may be unsafe. Consider using setvbuf instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(292) : 参见“setbuf”的声明
========== 生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
牡丹花下死做鬼 发表于 2014-1-26 23:29 static/image/common/back.gif
VC++6.0 亲测 OK
以前貌似看到有文章说VS更好的运行C要修改某些选项参数 曾拥有的方向 发表于 2014-1-26 23:32 static/image/common/back.gif
哦哦 我新建忘改后缀了..不过还是报错一个 关于setbuf的引用问题.我的是VS2013
1>------ 已启动生成:项 ...
setbuf(stdin,NULL);是为了清空输入流 也可以换成fflush(stdin); 牡丹花下死做鬼 发表于 2014-1-26 23:36 static/image/common/back.gif
setbuf(stdin,NULL);是为了清空输入流 也可以换成fflush(stdin);
恩恩 换这个函数就可以了,,为什么最近更新了VS之后 好多次出现scanf函数报错的情况,,看声明我换成scanf_s就可以了这两个是为什么啊?还有我刚运行了,, 所有的结果都是不符合哥德巴赫猜想哇 曾拥有的方向 发表于 2014-1-26 23:41 static/image/common/back.gif
恩恩 换这个函数就可以了,,为什么最近更新了VS之后 好多次出现scanf函数报错的情况,,看声明我换成scanf_s ...
我劝你还是下载个VC++6.0吧 VS2013不适合我们这种菜鸟 牡丹花下死做鬼 发表于 2014-1-27 00:25 static/image/common/back.gif
我劝你还是下载个VC++6.0吧 VS2013不适合我们这种菜鸟
结果不管我是用什么偶数范围都是返回不符合哥德巴赫猜想...我来回看了好几遍代码..没发现哪块有错啊...为什么啊,还有较大数取到百万以上,执行的时候就会卡住不出结果...版主求教 曾拥有的方向 发表于 2014-1-27 11:10 static/image/common/back.gif
结果不管我是用什么偶数范围都是返回不符合哥德巴赫猜想...我来回看了好几遍代码..没发现哪块有错啊... ...
第一个问题你是说我的代码??? 我试过OK啊
第二几百万 要是你的代码的话 定义的是int 不溢出才怪 long int 的范围我也忘了不知道会不会溢出查一下就知道了 C要处理大数比较麻烦你是VS2013支持C99标准最大的就是unsigned long long int了范围挺大的 实在不行要验证大数你就用python吧 是啊,,就是用你的代码,, 就是把 setbuf(stdin,NULL)修改成fflush(stdin) 然后scanf修改成scanf_s ,结果就是不成立.. 牡丹花下死做鬼 发表于 2014-1-27 11:16 static/image/common/back.gif
第一个问题你是说我的代码??? 我试过OK啊
第二几百万 要是你的代码的话 定义的是int 不溢出才怪 long ...
而超过百万级运行就会卡在这..
曾拥有的方向 发表于 2014-1-27 11:31 static/image/common/back.gif
而超过百万级运行就会卡在这..
按理说long int 不应该啊...根本就没达到上限 曾拥有的方向 发表于 2014-1-27 11:29 static/image/common/back.gif
是啊,,就是用你的代码,, 就是把 setbuf(stdin,NULL)修改成fflush(stdin) 然后scanf修改成scanf_s ,结 ...
代码好像是有点问题 待会我改下 牡丹花下死做鬼 发表于 2014-1-27 11:56 static/image/common/back.gif
代码好像是有点问题 待会我改下
恩恩 谢谢啦 ,
页:
[1]
2