poj 1183

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


 

原文地址:https://www.cnblogs.com/lj030/p/3002239.html