- P26's solution
P26's Solution
- 2025-9-4 21:59:20 @
直接爆搜即可。
#include <bits/stdc++.h>
using namespace std;
const int p[64]={3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293};
int o[22],n,m;
void output()
{
for(int i=n;i>=1;i--)
cout<<o[i]<<' ';
cout<<endl;
}
int dfs1(int h,int l,int s)
{
if(s<0) return 0;
if(l==0)
{
if(s==0) return 1;
return 0;
}
int ans=0;
for(int i=h+1;i<=60;i++)
ans+=dfs1(i,l-1,s-p[i]);
return ans;
}
void dfs2(int h,int l,int s)
{
if(s<0) return;
if(l==0)
{
if(s==0) output();
return;
}
for(int i=h+1;i<=60;i++)
{
o[l]=p[i];
dfs2(i,l-1,s-p[i]);
}
}
int main()
{
cin>>n>>m;
int f=dfs1(-1,n,m);
if(!f)
{
puts("No Answer.");
return 0;
}
cout<<f<<endl;
dfs2(-1,n,m);
return 0;
}