题意:打印出10个,1~m 的和等于 m~n的m和n
解析:由题意:( 1 + m ) * m = ( m + n ) * ( n - m + 1 ).
整理得: 2 * m * m = n * ( n + 1 ).
二分搞一搞 + 究极打表大法.
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
using namespace std;
const int maxn = 1e6;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = 4 * atan(1.0);
const double ee = exp(1.0);
int main()
{
#ifdef LOCAL
//freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // LOCAL
printf("#include <cstdio>\n\n");
printf("int main()\n");
printf("{\n");
int cnt = 0;
LL n = 2;
while (cnt < 10)
{
LL lo = 1, hi = n;
while (lo <= hi)
{
LL mi = (lo + hi) >> 1;
LL t1 = 2 * mi * mi;
LL t2 = n * (n + 1);
if (t1 == t2)
{
printf("\tprintf(\"%10lld%10lld\\n\");\n", mi, n);
cnt++;
break;
}
if (t1 < t2)
lo = mi + 1;
else
hi = mi - 1;
}
n++;
}
printf("\treturn 0;\n");
printf("}");
return 0;
}
#include <cstdio>
int main()
{
printf(" 6 8\n");
printf(" 35 49\n");
printf(" 204 288\n");
printf(" 1189 1681\n");
printf(" 6930 9800\n");
printf(" 40391 57121\n");
printf(" 235416 332928\n");
printf(" 1372105 1940449\n");
printf(" 7997214 11309768\n");
printf(" 46611179 65918161\n");
return 0;
}