驗證哥德巴赫猜想(C++)
阿新 • • 發佈:2018-11-16
哥德巴赫猜想:
1)任一不小於6的偶數,都可以表示成兩個奇質數之和
2)任一不小於9的奇數,都可以表示成三個奇質數之和
尤拉也提出另一個等價版本,即任一大於2的偶數都可寫成兩個質數之和。尤拉的命題比哥德巴赫的命題要求更高。現通常把這兩個命題統稱為哥德巴赫猜想。
演算法:
將6~n以內的偶數分解為兩個質數之和
設n=n1+n2
- 令n1=3~n/2
- 若n1是質數,則令n2=n-n1;否則n1++,再轉2
- 若n2是質數,則分解式已找到,否則,令n1++,再轉2
程式碼:
#include <iostream>
#include <math.h>
using namespace std;
void divide(int);
int isPrime(int);
int main()
{
int i,n;
cout<<"請輸入一個大於6的整數:";
cin>>n;
if(n<6) return 0;
for(i=6;i<=n;++i)//從 6到 n,每個數都判斷一次
divide(i);
return 0;
}
void divide(int n)
{
int i,m;
for(i=3;i<n/2;++i)
{
if (isPrime(i)==0) continue;//i不是質數
m=n-i;
if(isPrime(m)!=0) break;//m是質數
}
if(i>n/2)
cout<<"哥德巴赫猜想不成立";
cout<<n<<"="<<i<<"+"<<m<<endl;
}
int isPrime(int n)//判斷質數
{
int i;
for(i=2;i<=sqrt(n);++i)//迴圈根號n次即可
{
if (n%i==0) return 0;//不是質數
return 1;//是質數
}
}