作业讲评-goldbahe猜想

作业讲评-goldbahe猜想

ID:41418375

大小:60.47 KB

页数:3页

时间:2019-08-24

作业讲评-goldbahe猜想_第1页
作业讲评-goldbahe猜想_第2页
作业讲评-goldbahe猜想_第3页
资源描述:

《作业讲评-goldbahe猜想》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、验证“哥德巴赫猜想在1000内成立分析(简单算法):•主函数的算法:对4至IJ1000之间的偶数进行穷举,验证每一个偶数都可以分解成两个索数的和。(将分解过程单独写成一个函数goldbahe)•函数goldbahe的算法:对于一个偶数even,要想分解成m+n,首先要对m从2至m/2进行穷举,得到其中的一个数im自然,另外一•个数就是n=even-m,然后验证这一对数是否是索数,是的话,得到的m和n就是组分解,不是继续判断下一组m和n.(这里判断素数可以另写成一个函数prime)•函数prime的算法:对于一个数n,要

2、判断它是否是素数,要从2至sqrt(n)进行穷举,验证每一个数是否能整除m如果发现能整除的数,说明n不是素数,返回0,否则,继续验证下一个数。直至循环结束返回1.(解法一:不用指针)#include#includeintprime(intn);/*函数声明*/voidGoldbach(inteven);/*函数声明*/voidmain(){inti;for(i=4;i<=1000;i+=2)/*循环验证4一1000之间的每一个正偶数*/{Goldbach(i);/*函数调用*/if(i

3、%50==0){puts("press'enter'tocontinue");getchar();}厂因为结果较多,中间停顿一次,目的是将结果分两次输出,用户按回车键后继续后半部分结果的输出*/}}intprime(intn)/*函数功能:判断n是否为素数,是返回1,不是返回0*/inti;for(i=2;i<=sqrt(n);i++)/*在循环中发现有因子,表明不是素数,返回0*/{if(n%i==0)return0;}return1;厂若循环结束仍未执行到returnO,则顺序执行此句,返回1,表明没找到因子,

4、n是素数S}voidGoldbach(inteven)/*验证even满足哥德巴赫猜想:将EVEN分解为m和n,并输出*/{intm,n;/*两变量分别用于存储分解的两数*/for(m=2;m<=even/2;m++)/*对第一个数的可能性进行穷举*/{n=even-m;厂根据第一个数得到第二个数Tif(prime(m)&&prime(n))/*若两数均为素数,表示找到一组分解,输出并返回*/{printf(u%d=%d+%dn,even,m,n);return;}}}解法二(用指针)#include

5、#includeintprime(intn);/*函数声明*/voidGoldbach(inteven,int*a,int*b);/*函数声明*7voidmain(){inti;intm,n;for(i=4;i<=10000;i+=2)厂循环验证4一1000之间的每一个正偶数*/{Goldbach(i,&m,&n);/*函数调用:对i进行分解,并将m,n的地址传递给形参,则函数中可以通过形参对进行间接引用,分解结果直接写入m,n*/printf(”%d=%d+%d”,i,m,n);if(i%50==

6、0)/*因为结果较多,中间停顿一次,目的是将结果分两次输岀,用户按回车键后继续后半部分结果的输出*/{puts("press'enter'tocontinue");getchar();intprime(intn)/*函数功能:判断n是否为素数,是返回1,不是返回0*/{inti;for(i=2;i<=sqrt(n);i++)/*在循环中发现有因子,表明不是素数,返回0*/{if(n%i==0)return0;}return1;厂若循环结束仍未执行到returnO,则顺序执行此句,返回1,表明没找到因子,n是素数*/

7、}厂验证even满足哥德巴赫猜想,并将分解的两个素数写到a,b指向的主调函数的变量中。*/voidGoldbach(inteven,int*a,int*b){intm,n;/*两变量分别用于存储分解的两数*/for(m=2;m<=even/2;m++)/*对第一个数的可能性进行穷举*/{n=even-m;/*根据第一个数得到第二个数*/if(prime(m)&&prime(n))/*在此函数中嵌套调用prime()若两数均为素数,表示找到一组分解*/{*a=m;厂将结果写入主函数a,b指向的主调函数的变量中S*b=n;

8、return;/*返回,因为结果已经通过上步写回去,因此只是返回到主调函数,不带回有用的数值T}}}厂该函数也可写成如下形式:与上边的区别即直接用*a,*b,未用变量进行过渡voidbahe(inteven,int*ajnt*b){for(*a=2;*a<=even/2;*a++){*b=eve*a;if(prime(*a)&&p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。