洛谷--P1579 哥德巴赫猜想(升级版)
程序员文章站
2022-04-15 14:51:40
题目链接:https://www.luogu.org/problem/P1579 任何一个大于9的奇数都可以表示成3个质数之和。既然他是奇数,那么他必定是 1、两个偶数+一个奇数; 2、三个奇数 对于两个偶数,也只有2满足条件,因此他只能是2、2、n-4;只要判断n-4是否满足质数就OK了; 对于两 ......
题目链接:https://www.luogu.org/problem/p1579
任何一个大于9的奇数都可以表示成3个质数之和。既然他是奇数,那么他必定是
1、两个偶数+一个奇数;
2、三个奇数
对于两个偶数,也只有2满足条件,因此他只能是2、2、n-4;只要判断n-4是否满足质数就ok了;
对于两个奇数,循环判断一下,从i=3开始,找到 i 之后, j 从 i 开始,找到 j 之后,再判断n-i-j是否满足条件
以下代码可供参考:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 1001; 4 int isprime(int k) 5 { 6 for(int i=2;i<=sqrt(k);i++) 7 { 8 if(k%i==0) 9 return 0; 10 } 11 return 1; 12 } 13 int main() { 14 int n; 15 cin>>n; 16 if(isprime(n-4)) 17 { 18 cout<<2<<' '<<2<<' '<<n-4<<endl; 19 } 20 else 21 { 22 for(int i=3;i<n;i++) 23 { 24 if(i%2!=0&&isprime(i)) 25 { 26 for(int j=i;j<n;j++) 27 { 28 if(j%2!=0&&isprime(j)) 29 { 30 if((n-i-j)%2!=0&&isprime(n-i-j)) 31 { 32 cout<<i<<' '<<j<<' '<<n-i-j<<endl; 33 return 0; 34 } 35 } 36 } 37 } 38 } 39 } 40 return 0;