#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