SPOJ ARCTAN (数论) Use of Function Arctan

详细的题解见这里

图片转自上面的博客

假设我们已经推导出来x在处取得最小值,并且注意到这个点是位于两个整点之间的,所以从这两个整数往左右两边枚举b就能找到b+c的最小值。

其实只用往一边枚举就够了,由于对称性,我们不妨假设b ≤ c,那么只要让b从2a开始递减枚举即可。

1 #include <iostream>
2 using namespace std;
3 long long a, i;
4 int main(){int T;cin>>T;while(T--){cin>>a;i=a*2;while((i*i+1)%(i-a))i--;cout<<(i*i+1)/(i-a)<<endl;}return 0;}
代码君
原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4465619.html