AshidaMana @ 2016-04-03 12:01:58
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int prime(int);
int n,a[10000]={0};
cin>>n;
for(int i=2,j=1;i<=n;i++)
if(prime(i))
{a[j]=i;j++;}
int i,j,k=1;
for(i=1;a[i]!=0;i++)
{
for(j=1;a[j]!=0;j++)
if(prime(n-a[i]-a[j]))
{cout<<a[i]<<' '<<a[j]<<' '<<n-a[i]-a[j];
k=0;break;}
if(k==0)
break;
}
return 0;
}
int prime(int x)
{
if(x==0||x==1)
return 0;
if(x==2)
return 1;
for (int i=2;i<=sqrt(x)+1;i++) {
if(x%i==0)
return 0;
}
return 1;
}
by cx0627 @ 2016-04-03 16:42:29
因为你wa了
by Hyle33ies @ 2016-04-03 16:57:50
时间复杂度小不一定正确
by AshidaMana @ 2016-04-03 16:59:19
那为什么会错啊?
by I_am_匿名用户 @ 2016-08-04 17:45:55
额 WA
by The_heir__Of_rome @ 2024-12-07 17:27:13
虽然9年后回复别人很奇怪
但是j需要大于等于i
输出格式 仅有一行,输出 3 个质数,这 3 个质数之和等于输入的奇数。相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。如果表示方法不唯一,请输出第一个质数最小的方案,如果第一个质数最小的方案不唯一,请输出第一个质数最小的同时,第二个质数最小的方案。