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