你的程序重复计算了很多,可以优化一下:
#include
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int n = 0;
double s = 0, sum = 0;
while(sum <= a){
s += 1.0/++n;
sum += 1.0/s;
}
int L = n;
while(sum < b){
s += 1.0/++n;
sum += 1.0/s;
}
int H = n-1;
if(H == L)
cout << H << endl;
else
cout << L << " " << H << endl;
return 0;
}
#include
void main()
{ double a,b,s,k;
int n1,n2;
cin>>a>>b;
s=1; n1=1; k=1;
while ( s<=a ) { n1++; k+=1.0/n1; s+=1/k; }
n2=n1;
while ( s n2--;
if ( n1!=n2 ) cout<
分子可以用累加的办法计算,算完a
1、速度问题。
以例子为例,计算左边大于2010的时候,q()做b值累加计算了(1+18611)*18611/2=173193966次;计算右边小于2011的时候,q()做b值累加计算了(1+18622)*18622/2=173398753次。都上亿次运算了,速度肯定不会快的。
2、算法问题。
貌似没有好的办法吧?涉及到调和级数这个东东,估计不好弄。有一个近似的算法,一来公式不好记,二来考计算机又不是考数学,所以你这样写应该就行了。