sâmbătă, 3 noiembrie 2012

Asemanatoare cu problema nr 8

Folosind metoda backtracking sa se descompuna in toate modurile un numar natural n ca suma de numere prime distincte ordonate crescator.


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

Niciun comentariu:

Trimiteți un comentariu