P1549题解

萌新第一个题解,望管理过审

好了话不多说我们来看代码

#include<iostream>
using namespace std;
int prime[20005];
int main()
{       
    prime[1] = 0;
    for(int i = 2; i <= 20000; i++)
        prime[i] = 1;
    for(int i = 2; i * i <=20000; i++)
    {
        if(prime[i] == 1)
        {
            for(int j = i; j * i <= 20000; j++)
                prime[j * i] = 0;
        }   
    }//上面为线性塞程序
    int n;
    cin>>n;
    int cnt = 0;//判断是否三个质数加起来等于n。
    for(int i = 2; i <= n; i++)
    {
        if(prime[i] == 1)
        {
            cnt+=i;
            for(int j = i; j <= n; j++)//枚举第二个质数最小情况
            {
                if(prime[j] == 1)
                {
                    cnt+=j
                    if(prime[n - cnt] == 1)//如果第二个和第三个数都为质数,则输出三个数,结束程序。
                    {
                        cout<<i<<" "<<j<<" "<<n - cnt;
                        return 0;
                    }

                }
            }
        }
        cnt = 0;//如果遍历完所有数后,没有符合情况的,就把计数器清零,开启下一次循环
    }

    return 0;
}

怎么样,看懂了吗?希望对您有帮助!

posted @ 2020-04-14 23:07  WRuperD  阅读(0)  评论(0编辑  收藏  举报  来源

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容