Pagini recente » Cod sursa (job #2293927) | Cod sursa (job #1527802) | Cod sursa (job #3205554) | Cod sursa (job #1131696) | Cod sursa (job #2349645)
#include <cstdio>
using namespace std;
const int nmax=20;
int nr=1,c=1,d,n;
long long int a[nmax],b[nmax],exp[nmax];
void backtracking(int p,int st,int dr,int numb)
{
if(p>n)
{
nr=nr+numb;
if(st<dr && st+dr<c+d)
c=st,d=dr;
return;
}
int i,j=1;
for(i=0;i<=b[p];++i)
{
if(i==b[p])
backtracking(p+1,st*j,dr,numb*(b[p]+1));
else
backtracking(p+1,st,dr*exp[p],numb);
j*=a[p];
}
}
int main()
{
int k,x;
scanf("%d",&k);
for(; k; --k)
{
scanf("%d",&x);
int i,j;
nr=1,c=1,d=x,n=0;
for(i=2,j=x; i*i<=j; ++i)
if(j%i==0)
{
a[++n]=i;
b[n]=0;
while(j%i==0) b[n]++,j/=i;
}
if(i<=j)++n,a[n]=j,b[n]=1;
for(i=1;i<=n;++i)
{
exp[i]=a[i];
for(j=2;j<=b[i];j++)
exp[i]*=a[i];
}
backtracking(1,1,1,1);
printf("%d %d %d",nr/2,c,d);
}
return 0;
}