明显的打表题,一开始想暴,发现太慢太慢了,后来加了个二分,很快就出答案了
打表程序如下
#include <iostream>
#include <cstdio>
using namespace std;
long long sum[100000000];
int l ,r, mid;
int main()
{
for(long long i = 1;i <= 100000000;i++)
{
sum[i] = sum[i-1]+i;
}
for(long long i = 2;i <= 100000000;i++)
{
l = 1;
r = i;
while(l < r)
{
if(l == r||l+1 == r) break;
mid = (l+r)/2;
if((sum[i] - mid) == 2*(sum[mid]-mid))
{
printf("%10d%10d\n", mid, i);
break;
}
else if((sum[i] - mid) > 2*(sum[mid]-mid))
{
l = mid;
}
else r = mid;
}
}
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
string s[20] =
{
" 6 8",
" 35 49",
" 204 288",
" 1189 1681",
" 6930 9800",
" 40391 57121",
" 235416 332928",
" 1372105 1940449",
" 7997214 11309768",
" 46611179 65918161"
};
int main()
{
for(int i = 0;i < 10;i++)
{
cout << s[i] << endl;
}
return 0;
}