Official

J - Output-only Editorial by kaage


任意の整数 \(m,n\) について、\(a=m^2-n^2,b=2mn,c=m^2+n^2\) とすると、\(a^2+b^2=c^2\) が成り立ちます。 \(n=1\) とすれば、\(m\) が任意の正の偶数のとき \(a,b,c\) の最大公約数は必ず \(1\) となり、組は順序を無視して独立になるので、このような \(m\) を探して \(a,b,c\) を昇順に並び替え、出力してやれば良いです。

他にもいろいろな解法が考えられます。

#include <iostream>
using lint = long long int;
inline lint gcd(lint a, lint b) {
	while (b) {
		lint c = a;
		a = b;
		b = c % b;
	}
	return a;
}
int main() {
	int cnt = 0;
	for (int i = 2;; i++) {
		lint A = lint(i) * i - 1, B = 2 * i, C = lint(i) * i + 1;
		if (gcd(A, gcd(B, C)) != 1) continue;
		std::cout << std::min(A, B) << " " << std::max(A, B) << " " << C
				  << std::endl;
		cnt++;
		if (cnt == 100000) break;
	}
}

posted:
last update: