直接爆搜即可。

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