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("%I64dn",result);
break;
}
}
return0;
}