在网上看的解题报告,推到了一会,终于想明白了这个过程,先写出c关于b的关系式,通过枚举b看是否符合c是整数的条件,然后确定界的问题,根据式子首先可确定b>a,
因为b和c在关系式中具有对称性,那么可让b永远都<=c(b和c的关系就三种),通过b-c<=0确定上界,然后通过f=c+b求导可知,在枚举b的范围内f是递减的,所以从大到小枚举
得到的第一个满足的,f就是最小,注意a*a比较大,要用unsigned long来定义a
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
unsigned long a;
cin>>a;
int i;
for(i=sqrt(a*a+1)+a;i>a;i--)
{
int c=(i*a+1)/(i-a);
if((i*a+1)%(i-a)==0)
{
cout<<i+c<<endl;
break;
}
}
return 0;
}