1.5.1 等差数列
题目考查
暴力枚举
我们考虑预先处理出所有的双平方数.
然后我们枚举首项, 枚举公差. 最后判断这些项是否都为双平方数即可.
题目细节
无
AC代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
using namespace std;
typedef long long ll;
const int N = 250 * 250 * 2 + 10;
bool vis[N];
int main()
{
int n, m; cin >> n >> m;
for (int i = 0; i <= m; ++i) {
for (int j = i; j <= m; ++j) vis[i * i + j * j] = 1;
}
vector<pair<int, int>> res;
int fmax = m * m * 2;
for (int i = 0; i <= fmax; ++i) {
if (!vis[i]) continue;
rep(d, fmax) {
int last = i + d * (n - 1);
if (last > fmax) break;
bool flag = 1;
rep(j, n - 1) {
if (!vis[i + j * d]) { flag = 0; break; }
}
if (flag) res.push_back({ d, i });
}
}
sort(res.begin(), res.end());
if (res.empty()) puts("NONE");
for (auto& [d, a] : res) printf("%d %d\n", a, d);
return 0;
}