大家好,今天开始,我将更新关于“猜想”的专栏。今天给大家带来的是哥德巴赫猜想。
哥德巴赫猜想:指任何大于4的偶数均可分解为两个质数之和。
这个猜想至今都未能验证,我们今天先来做一个程序验证某个数是否符合哥德巴赫猜想。
问题1:
输入一个偶数n,将这个数分解成两个质数之和。(小的数放前面,若有多种则以前数最小为准)
例:
输入: 输出:
8 8=3+5
那么我们需要先知道如何判断质数。
我们可以建立一个函数,内置一个for循环,从2循环到n-1,如果中间出现可以整除原数的数,则返回false,若没有,则会跳出循环,然后返回true,函数如下:
bool isprime(int a){
if(a <= 1) return false;
for(int i = 2;i <= a - 1;i++){
if(a % i == 0) return false;
}
return true;
}
注意:当a<=1时不可能是质数,所以要先排除掉0,1,负数的可能性。
好,那么我们就可以用这个isprime函数来判断质数了。
接下来我们可以将输入的n分解成i和n-i两个数,再通过for循环嵌套出i和n-i的所有可能性。
然后用isprime函数检验i和n-i是否都是质数,最后输出并结束循环。
代码如下:
for(int i = 1;i <= n;i++)
if(isprime(i) && isprime(n - i)){
cout << n << "=" << i << "+" << n - i << endl;
break;
}
注意:输出是i放前面,n-i放后面,反了会大数在前小数在后。
既然如此,那加一个输入就行了,完整代码如下:
#include <iostream>
using namespace std;
bool isprime(int a){
if(a <= 1) return false;
for(int i = 2;i <= a - 1;i++){
if(a % i == 0) return false;
}
return true;
}
int main(){
int n;
cin >> n;
for(int i = 1;i <= n;i++)
if(isprime(i) && isprime(n - i)){
cout << n << "=" << i << "+" << n - i << endl;
break;
}
}
问题2:
输入一个偶数 N,验证 4∼N 所有偶数是否符合哥德巴赫猜想。
这道题只是加了个for,直接代码带过。
#include <bits/stdc++.h>
using namespace std;
bool isprime(int a){
if(a <= 1) return false;
for(int i = 2;i <= a - 1;i++){
if(a % i == 0) return false;
}
return true;
}
int main(){
int n;
cin >> n;
for(int i = 4;i <= n;i+=2){
for(int j = 1;j <= n;j++)
if(isprime(j) && isprime(i - j)){
cout << i << "=" << min(j,i - j) << "+" << max(j,i - j) << endl;
break;
}
}
}
好了,今天就分享到这里,谢谢大家!