#include<iostream.h>
int n,x[100],v[100],m;
int prim(int n)
{int i;
if(n==0 || n==1) return 0;
else if(n==2 || n==3) return 1;
else if(n%2==0) return 0;
for(i=3;i*i<=n;i+=2)
if(n%i==0) return 0;
return 1;
}
void afis(int n)
{ int i;
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void back(int k,int sp)
{ int i;
for(i=1;i<=m;i++)
{ x[k]=v[i];
sp=sp+x[k];
if(sp<=n && x[k]>x[k-1]) if(sp==n) afis(k);
else back(k+1,sp);
sp=sp-x[k];
}
}
void main()
{ int i;
cin>>n;
m=0;
for(i=2;i<=n;i++) if(prim(i)) { m++;
v[m]=i;
}
back(1,0);
}
sau
#include<iostream>
using namespace std;
int v[50],x[50],n,p;
int prim(int n)
{ if(n==0 || n==1) return 0;
for(int i=2;i<=n/2;i++)
if(n%i==0) return 0;
return 1;
}
void citire()
{ cout<<"n="; cin>>n;
for(int i=1;i<=n;i++) if(prim(i)) v[++p]=i;
}
void afis(int n)
{
for(int i=1;i<=n;i++) cout<<x[i]<<" ";
cout<<endl;
}
void back(int k, int sp)
{
if(sp==n) afis(k-1);
else for(int i=1;i<=p;i++)
{ x[k]=v[i];
if(sp+x[k]<=n && k<=p && x[k]>=x[k-1]+1 || k==1) back(k+1,sp+x[k]);
}
}
int main()
{ citire();
back(1,0);
return 0;
}
|