Si doar un rezultat e bun...
Cod:
#include <iostream>
#include <fstream>
using namespace std;
int st[100],N,n,a[100] ;
void inceput()
{
ifstream f("divizori.in");
f>>N;
a[1]=1;
n=1;
for( int i=2; i<=N/2; i++)
{
if(N%i==0)
{
n++;
a[n]=i;
}
}
n++;
a[n]=N;
}
int done=0;
void afisare(int k)
{
ofstream g("divizori.out");
g<<k<<endl;
for(int i=1; i<=k; i++)
g<<a[st[i]]<<" ";
g<<endl;
g.close();
done=1;
}
int valid(int k)
{
for(int i=1; i<=k-1; i++)
if (st[i]==st[k])
return 0;
if(k>1)
{
if( a[st[k]] % a[st[k-1]] !=0 && a[st[k-1]] % a[st[k]]!=0 )
return 0;
}
return 1;
}
void back(int k)
{
if(done==1) return;
for(int i=1; i<=n; i++)
{
st[k]=i;
if(valid(k))
{
if(k==n)
afisare(k);
else
back(k+1);
}
}
}
int main()
{
inceput();
back(1);
return 0;
}
