Filip Georgiana-Teodora
#include <iostream>
using namespace std;
int v[100],p[100],m=0,n,s;
int valid(int k)
{
int i;
if(k>1&&v[k]<=v[k-1])
return 0;
s=0;
for(i=1;i<=k;i++)
s+=p[v[i]];
if(s>n)
return 0;
return 1;
}
int prim(int x)
{
int d;
if(x<=1) return 0;
for(d=2;d<=x/2;d++)
if(x%d==0) return 0;
return 1;
}
void afisare(int k)
{
int i;
for(i=1;i<=k;i++)
cout<<p[v[i]]<<" ";
cout<<endl;
}
void back(int k)
{
int i;
for(i=1;i<=m;i++)
{
v[k]=i;
if(valid(k))
if(s==n)
afisare(k);
else
back(k+1);
}
}
int main()
{cin>>n;
int x=2;
while(x<=n)
{if(prim(x))
{
m++;
p[m]=x;
}
x++;
}
back(1);
}
5/53
#include <iostream>
using namespace std;
int v[100],p[100],m=0,n,s;
int valid(int k)
{
int i;
if(k>1&&v[k]<=v[k-1])
return 0;
s=0;
for(i=1;i<=k;i++)
s+=p[v[i]];
if(s>n)
return 0;
return 1;
}
int prim(int x)
{
int d;
if(x<=1) return 0;
for(d=2;d<=x/2;d++)
if(x%d==0) return 0;
return 1;
}
void afisare(int k)
{
int i;
for(i=1;i<=k;i++)
cout<<p[v[i]]<<" ";
cout<<endl;
}
void back(int k)
{
int i;
for(i=1;i<=m;i++)
{
v[k]=i;
if(valid(k))
if(s==n)
afisare(k);
else
back(k+1);
}
}
int main()
{cin>>n;
int x=2;
while(x<=n)
{if(prim(x))
{
m++;
p[m]=x;
}
x++;
}
back(1);
}