#include<iostream>
#include<cmath>
#include<stack>
using namespace std;
// 记录答案
struct solution
{
int a, b;
solution(int a1, int b1) :a(a1), b(b1) {};
friend ostream& operator<<(ostream& out, const solution& s)
{
out << s.a << " " << s.b; return out;
}
};
int main()
{
int m, n;
stack<solution> ans;
cin >> m >> n;
unsigned long long store = 0;
for (int i = n;i >= m; i--)
{
//化简了一下三次方的运算,避免溢出
store = i * i + i * (i - 1) + (i - 1) * (i - 1);
long long half = sqrt(store);
// 判断是否开方为整数
if (store == half* half) {
for (int j = 1; j < half; j++) {
long long res = j * j + (j - 1) * (j - 1);
if (res == half) ans.push({ i,j });
// 减少判断次数
else if (res > half) break;
}
}
}
if (!ans.empty())
{
cout << ans.top(); ans.pop();
while (!ans.empty()) { cout << endl << ans.top(); ans.pop(); }
}
else cout << "No Solution";
return 0;
}
期末补其他科目补烦了,随手打段代码
题很简单,代码没什么技术含量,简单记录一下