1/a = (1/b + 1/c)/(1 - 1/(b*c))<=> 1/a = (b+c) / (b*c-1)
<=> b*c-1 = a*b + a*c
<=> c = (a*b+1) / (b-a);(可知:b>a)
b+c = b + (a*b+1) / (b-a)
= b +(a*(b-a+a) / (b-a)
= b + a +(a*a+1) / (b-a)
设 t=b-a是正整数,则有:b + c = t + 2*a +(a*a+1)/t为正整数。所以我们要求的就是f(t)=t+2*a(a*a+1)/t的最小正整数值。由于f(t)为正整数,t|(a*a+1)。这样,我们就可以通过用穷举a*a+1因子的方法来一一找出t的所有可能值并求f(t)的最小值。注意到f(t)在小于sqrt(a*a+1)时是减函数,所以只需要从a到1依次试下去,第一次到a*a+1的约数时的t所对应的f(t)就是问题的解答
#include<iostream>
using namespace std;
int main()
{
__int64 a,i,b,result;
scanf("%I64d",&a);
b=a*a+1;
for(i=a;i>0;i--)
{
if(b%i==0)
{
result=i+2*a+(b/i);
printf("%I64d\n",result);
break;
}
}
return 0;
}