#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); }
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.
Abonați-vă la:
Postare comentarii (Atom)
Niciun comentariu:
Trimiteți un comentariu