题目描述:求 ∑N(p,q),N(p,q)表示使(p√+q√)2n的小数部分开头有至少连续2011个9的最小的n。其中 p<q,p+q<=2011
先吃药……
注意到(p√+q√)2n+(p√−q√)2n是整数
设 t=q√−p√,这里 t 肯定只能是无理数
所以相当于是t2n小数部分开头要有至少2011个0
显然,必须有t < 1…
t2n<10−20112nlogt<−2011
完了……
//log() → ln() -_-|||
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#define D double
using namespace std;
int cal(int x,int y)
{
D t = sqrt(y) - sqrt(x);
if (t >= 1.) return 0;
t = log10(t);
int n = int(- 2011. / 2. / t);
if (2. * t * n > -2011.) n ++;
return n;
}
int main()
{
int ans = 0;
for (int i = 1;i < 2011;i ++)
for (int j = i + 1;i + j <= 2011;j ++)
ans += cal(i,j);
cout << ans << endl;
}