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;
}