cf 584D - Dima and Lisa
做法 : 暴力枚举验证1e9内哥德巴赫猜想,将输入的奇数减去3,变成合数,然后验证,特殊情况特判
暴力枚举验证哥德巴赫猜想, 经验之谈?(看网上的题解,说1e9内相邻质数距离不超过300,可能是一个根据,可是不知道为什么是一个根据,总之 知道了可以暴力枚举验证哥德巴赫猜想就完了,虽然这样的经验之谈有点不爽)
代码
#include<bits/stdc++.h>
using namespace std;
int prime(int x) {
if(x == 1 || !x) return 0;
for(int i = 2; i <= x / i; i++) {
if(x % i == 0) return 0;
}
return 1;
}
int main() {
int n;
scanf("%d", &n);
if(n == 3 || n == 5 || n== 7) {
printf("1\n%d\n", n);
return 0;
}
else if(n == 4) {
printf("2\n2 2\n");
return 0;
}
n -= 3;
if(prime(n)) {
printf("2\n3 %d\n", n);
}
else {
for(int i = n; i >= 2; i--) {
if(prime(i) && prime(n-i)) {
printf("3\n3 %d %d\n", i, n-i);
break;
}
}
}
return 0;
}