//我tm都优化成这样还超时
//别告诉我这题的正解是dp
#include<bits/stdc++.h>
using namespace std;
int n,a[1500000]={2};//这个范围是根据1~10^7的素数个数搞出来的,大概是n/log(n),用计算器算的,是1428571点几
                                       //但这范围要是再大一点就会compile error,我也不知道为啥
bool pr[10000005],f;
void dfs(int dep,int lef)
{
    if(lef==0&&dep==5)
    {
        f=1;
        for(int i=1;i<=dep-1;i++)cout<<a[i]<<' ';
        cout<<endl;
        exit(0);
    }
    if(dep==5)return;//没有这个你就废了!!!
    for(int i=a[dep-1];i<=lef;i++)
    {
        if(pr[i])
        {
            a[dep]=i;
            dfs(dep+1,lef-i);
        }
        
    }
}
int main()
{
    cin>>n;
    for(int i=2;i<=n;i++)pr[i]=1;
    for(int i=2;i*i<=n;i++)
        if(pr[i])
            for(int j=i*i;j<=n;j+=i)
                pr[j]=0;
    dfs(1,n);
    if(!f)cout<<"Impossible"<<endl;
    return 0;
}

1 条评论

  • 1

信息

ID
1603
难度
10
分类
(无)
标签
递交数
16
已通过
0
通过率
0%
被复制
4
上传者