浅析哥德巴赫猜想
哥德巴赫猜想简介
哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。
但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。
因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。
(n>5:当n为偶数,n=2+(n-2),n-2也是偶数,可以分解为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,可以分解为两个质数的和)欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。
今日常见的猜想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。
1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。
今日常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。
从关于偶数的哥德巴赫猜想,可推出:任一大于7的奇数都可写成三个质数之和的猜想。后者称为“弱哥德巴赫猜想”或“关于奇数的哥德巴赫猜想”。若
关于偶数的哥德巴赫猜想是对的,则关于奇数的哥德巴赫猜想也会是对的。
2013年5月,巴黎高等师范学院研究员哈洛德·贺欧夫各特发表了两篇论文,宣布彻底证明了弱哥德巴赫猜想。
————百度百科
咱们说人话
蒟蒻ygj体会与学习笔记:
-
众所周知1既不是质数也不是合数
-
所有偶数(除了2)都是合数且可以写成两个质数之和 例如:26 = 13 +13; 48 = 19 +27;98 = 57 +43;
-
一个不是质数的奇数如果减去二后是一个质数既它可以认为是2和一个质数的和(貌似是废话)
-
一个不是质数的奇数如果减去二后不是一个质数那么它可以写成三个质数的和;例如:1298398141,912370987,1234567809(具体是那三个质数之和我求不出来啊)
-
学不好数学 == 学不好OI???我太菜了
蒟蒻ygj源代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
bool isPrime(int n){
for(int i = 2;i <= n;i++){
if(i*i>n) break;
if(n % i ==0) return false;
}
return true;
}
int ans;
void dd(int x){
int y=x-2;
for(int i = y;i >=2;i-- ){
int z = x-i;
if(isPrime(i)){
ans++;
if(isPrime(z)){
ans++;
cout << ans;
break;
}
else {
dd(z);
}
}
}
}
int x;
int main(){
scanf("%d",&x);
if(isPrime(x)){
cout << 1;
return 0;
}
dd(x);
return 0;
}
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
bool isPrime(int n){
for(int i = 2;i <= n;i++){
if(i*i>n) break;
if(n % i ==0) return false;
}
return true;
}
int ans;
void dd(int x){
int y=x-2;
for(int i = y;i >=2;i-- ){
int z = x-i;
if(isPrime(i)){
ans++;
if(isPrime(z)){
ans++;
cout << ans;
break;
}
else {
dd(z);
}
}
}
}
int x;
int main(){
scanf("%d",&x);
if(isPrime(x)){
cout << 1;
return 0;
}
dd(x);
return 0;
}
丁神源代码orz:
#include<cstdio>
using namespace std;
bool judge(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0) return false;
}
return true;
}
/*bool isPrime(int n){
for(int i = 2;i <= n;i++){
if(i*i>n) break;
if(n % i ==0) return false;
}
return true;
}*/
int main(){
int n;
scanf("%d",&n);
if(judge(n)){
printf("1\n");
return 0;
}
if(n%2){
if(judge(n-2)){
printf("2\n");
}else{
printf("3\n");
}
return 0;
}else{
printf("2\n");
return 0;
}
return 0;
}
一名成熟的oi选手根本不需要编译器 -------北京大学dms