素数的判断和哥德巴赫猜想的简证
2016-05-28 13:39
211 查看
简述题目要求:
/*设计一函数,判断一整数是否为素数。并完成下列程序设计:
①编写求素数的函数,并用这个函数求 3-200 之间的所有素数
②在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197*/
对于素数的判断,我利用了一个bool类型的函数来描述,鉴于题目是从2开始输出,故int num 只考虑了从2开始的情况:
(有一个编程的小技巧,个人愚见:用数据进行试探性验证,进行算法的编写,会更加高效)
注意对sqrt()函数的使用要引入#include头文件
然后可以用一个循环依次进行数据的判定即可,为了保证代码的完整性,给出如下代码(均写在main函数中):
然后就可以验证哥德巴赫猜想了:
/*设计一函数,判断一整数是否为素数。并完成下列程序设计:
①编写求素数的函数,并用这个函数求 3-200 之间的所有素数
②在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197*/
对于素数的判断,我利用了一个bool类型的函数来描述,鉴于题目是从2开始输出,故int num 只考虑了从2开始的情况:
(有一个编程的小技巧,个人愚见:用数据进行试探性验证,进行算法的编写,会更加高效)
注意对sqrt()函数的使用要引入#include头文件
bool primeNum(int num){ if(num==2) return true; else{ int i; double n=num;//注意sqrt()函数要求对double类型的数据处理 for(i=2;i<sqrt(n)+1;i++)//sqrt(n)+1预防其值为整数情况 if(num%i==0) return false; if(i>sqrt(n)) return true; } }
然后可以用一个循环依次进行数据的判定即可,为了保证代码的完整性,给出如下代码(均写在main函数中):
printf("求3-200 之间的所有素数:\n"); printf("------------------------------------------------------------------------------\n"); int num=0;//用于格式化输出,要在for之外声明,本人渣渣掉过几次坑 for(int i=3;i<=200;i++){ if(primeNum(i)){ cout<<i<<" "; num++; if((num+5)%5==0)//保证一行有5个数 printf("\n"); } } printf("---------------------------------------------------------------------------\n");
然后就可以验证哥德巴赫猜想了:
//注意:内层for循环的终止条件是j<=i/2,而不是j<i,有兴趣可以试一试 printf("在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197:\n"); printf("-----------------------------------------------------\n"); for(int i=4;i<=200;i=i+2){ for(int j=2;j<=i/2;j++){ int temp=i-j; if(primeNum(j)&&primeNum(temp)) printf("%d=%d+%d ",i,j,temp); } printf("\n"); }
相关文章推荐
- 安装Dubbo注册中心(Zookeeper-3.4.6)
- JDK1.8新特性
- 安装Python交互式数据处理工具——IPython
- ubuntu 16.04 LAMP环境手动配置以及问题解析
- 枚举类
- STM32的UART DMA传输总结
- 调试uIP出现死机问题
- Android几种自定义view,优化UI
- iframe 内联框架
- Delphi RAD Server 应用服务基础平台
- html5中列表元素
- Android 访问 WSDL 接口复习
- About speech
- uIP的ARP协议分析
- 命名规则及包划分
- mongo-单节点安装
- nodejs学习笔记
- (转) 解决ssh的"Write failed: Broken pipe"问题
- jzoj 2016.5.28noip模拟赛C 总结
- 如何使函数不生成执行代码