#include <stdio.h> #include <conio.h>   int n,x[100],v[100],m=0;    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++)       printf("%d ",x[i]);       putchar('\n');     }   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];      }     }   main(){     int i;     puts("\nDati n: ");     scanf("%d",&n);      for(i=2;i<=n;i++) if(prim(i)) { m++;                           v[m]=i;                        }      back(1,0);      getch();     } cam asta ar fi .. trebuie sa stapanesti conceptul de backtracking prima data , si abia apoi poti jongla cu asa ceva.