题目来源
题目描述
输入一个偶数 N,验证 4∼N 所有偶数是否符合哥德巴赫猜想:任一大于 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10,10=3+7=5+5,则 10=5+5 是错误答案。
输入格式
第一行输入一个正偶数 N
输出格式
输出行。对于第 i 行:
首先先输出正偶数 2i+2,然后输出等号,再输出加和为 2i+2 且第一个加数最小的两个质数,以加号隔开。
思路
又是一遍过,真不知要咋说
其实
本题的关键在于判断质数
必须奉上判断质数的自定义函数
bool num(int a){
if(a==0||a==1) return false;//这一行可以不添,题目不需要,尽量加上
for(int i=2;i<a;i++){
if(a%i==0){
return false;
}
}
return true;
}
然后
#include<iostream>
using namespace std;
bool num(int a){//判断质数
for(int i=2;i<a;i++){
if(a%i==0){
return false;
}
}
return true;
}
int main(){
int a;
cin>>a;
for(int i=4;i<=a;i+=2){//要i+=2,因为要求是偶数
for(int j=2;j<i;j++){//要从小往大循环
if(num(j)&&num(i-j)){//判断两个加数是否为质数
cout<<i<<"="<<j<<"+"<<i-j<<endl;//输出
break;//一定要break,不然错误情况就输出来了
}
}
}
return 0;//良好习惯
}
后来,我又想用python写一下,结果
好吧,我python还是不行