Key To Problem
首先,这是一道简单的数论。
设
a1,a2,a3,a4...am
是n的所有约数
则
na1,na2,na3...nam
同样是n的所有约数
所以
a1+a2+a3+...+am=na1+na2+na3+...+nam
a1+a2+a3+...+am=n∗(1a1+1a2+1a3+...+1am)
设n的所有约束和等于S,n的所有约数的倒数之和等于T
可以得到 n=ST
再判断n的约束和是否等于A即可
CODE
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 32000
using namespace std;
int a,b1,b2,sum;
int q(int x)
{
int ans=0;
for(int i=1;i*i<=x;i++)
if(x%i==0&&i*i!=x)
ans+=i,ans+=x/i;
else if(i*i==x)
ans+=i;
return ans;
}
int main()
{
while(scanf("%d%d%d",&a,&b1,&b2)&&(a||b1||b2))
{
if(a%b1)
{
printf("0\n");
continue;
}
int n=a/b1*b2;
if(a==q(n))
printf("1 %d\n",n);
else
printf("0\n");
}
return 0;
}