实验:验证哥德巴赫猜想
2016-09-27 08:55
225 查看
//哥德巴赫猜想:即任一个大于2的偶数都可以写成两个质数之和
//请验证这个对于较大的偶数都是成立的
//算法:goldbach(n)
//输入:整数n
//输出:1表示成立,0表示猜想有误
//请验证这个对于较大的偶数都是成立的
//算法:goldbach(n)
//输入:整数n
//输出:1表示成立,0表示猜想有误
#include "stdafx.h" #include "stdio.h" #include <iostream> #include <fstream> #include <vector> #include <math.h> #include<ctime> #define N 5000 using namespace std; //函数声明 void getPrimeNumber(vector<int> &primeNumbers,int n);//得到n以前的质数 int goldBach(int n, vector<int> &primeNumbers);//验证哥德巴赫猜想 int _tmain(int argc, _TCHAR* argv[]) { ofstream output("c://output."); vector<int> primeNumbers ; //存质数 for ( int testN = 100 ; testN <= N ;testN += 100) { clock_t _start = clock(); getPrimeNumber(primeNumbers,testN); //得到质数 //哥德巴赫猜想 if (goldBach(testN,primeNumbers) == 1 ) { clock_t _end = clock(); cout<< float(_end - _start) <<endl; output<<testN<<","<<float(_end - _start) <<endl; } } output.close(); getchar(); return 0; } //验证哥德巴赫猜想 int goldBach(int n, vector<int> &primeNumbers) { int isGoldBach = 1 ; int index1 ,index2; int n1,n2; for ( int i = 4 ; i != n+1 ; i++) { if( i % 2 != 0 ) continue ; int flag = 0 ; for( index1 = 0; index1 < primeNumbers.size(); index1 ++ ) { n1 = primeNumbers.at(index1); if( n1 > i /2 ) break ; for(index2 = primeNumbers.size() - 1 ; index2 >= 0; index2 -- ) { n2 = primeNumbers.at(index2); if( n2 < i / 2) break ; if( n1 + n2 == i) { flag = 1 ; cout<<n1 << " + " << n2 << " = " << i << endl ; break ; } } if(flag == 1) { // cout << n1<<" + "<<n2 << " = "<<i<<endl; break ; } } if( !flag ) { isGoldBach = 0 ; cout << " 验证失败 " << endl; break ; } } return isGoldBach; } //得到n之前的素数 void getPrimeNumber(vector<int> &primeNumbers,int n) { primeNumbers.clear(); if(n <= 2) { return ; } bool isPrime ; for(int i = 2 ; i != n ; i++) { if( i == 2 || i == 3) { primeNumbers.push_back(i); continue; } isPrime = true ; for( int j = 2 ; j != i ; j ++) { if ( i % j == 0) { isPrime = false ; break ; } } if(isPrime) { primeNumbers.push_back(i); } } }
相关文章推荐
- 实验5 函数验证哥德巴赫猜想
- Socke技术验证哥德巴赫猜想
- 循环-04. 验证“哥德巴赫猜想”(20)
- 验证“哥德巴赫猜想”
- 在PC上安装虚拟机进行网络实验。如何规划,进行安装DHCP服务实验。还有dns服务器的验证
- C语言:验证哥德巴赫猜想(Goldbach conjecture verification )
- 网页图片验证码实验心得
- 求用c语言验证哥德巴赫猜想
- 实验三:顺序栈和链队列验证实验
- 验证哥德巴赫猜想-C
- 验证哥德巴赫猜想
- NetScaler的部署实验之六更新NetScaler配置LDAP用户身份验证
- 实验验证redis的快照和AOF
- CCNA实验-PPP的验证
- 实验二 熟悉Xenserver删除快照命令、验证删除快照后对原虚机的影响
- 验证“哥德巴赫猜想”(20 分)
- veridata实验举例(4)验证veridata查找出updata、delete操作导致的不同步现象
- linux基础概念和个人笔记总结(2)——账号和权限管理实验验证
- 详解BSCI实验二、配置ospf验证,汇总,虚链路
- 【实验二】顺序表实验验证