欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

洛谷--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;