wangshaojie100 @ 2017-09-16 00:55:22
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int sushu(int a) 判断是否是素数
{
int n;
if(a%2==0) return 0;
for(n=3;n<(int)sqrt(a);n+=2)
if(a%n==0) return 0;
return 1;
}
int main(void)
{ int a[20000]={0};
int b[2500];
int q,n,k,p=0,num;
for(n=2;n<20000;n++) 运用埃氏筛生成0~20000质数表
a[n]=1;
for(n=2;n<143;n++)
{
for(k=2;k<=20000/n;k++)
a[k*n]=0;
}
for(n=0;n<20000;n++)
if(a[n]!=0) b[p++]=n;
cin>>num;
for(q=0;q<p;q++)
for(n=0;n<p;n++) 判断时,先判断前两个数,第三个数用减法,可以确保最小
if(sushu(num-b[n]-b[q])) {printf("%d %d %d",b[q],b[n],num-b[n]-b[q]); return 0;}
return 0;
}
本蒟蒻第一次这么顺啊,最后那个减法的思路无意中想出来了,果然今天洛谷抽签大吉啊。。 thanks for watch
by 金镖十三娘 @ 2018-02-12 15:23:06
您可以交题解...
这样直接放代码对有些常看讨论的人来说不好Thank you