在网上看的解题报告,推到了一会,终于想明白了这个过程,先写出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; }