题目描述
输出不少于100100组不同的本原勾股数: $1≤a≤b≤c≤103$,满足:$a2+b2=c2$且$gcd(a,b,c)=1$
输入
无
输出
根据描述输出
样例输入
样例输出
1 2 3
| 3 4 5 5 12 13 ....以下省略 你不必输出完全一样,输出不少于100组不同的勾股数,就可以了
|
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include<iostream> #include <set> #include <algorithm> using namespace std; struct GG { int x, y, z; GG(int x, int y, int z) : x(x), y(y), z(z) { } bool operator<(const GG &g) const { if (x != g.x)return x < g.x; if (y != g.y)return y < g.y; return z < g.z; } }; void solve() { set<GG> G; for (int i = 1; i <= 20; i++) for (int j = i + 1; j <= 40; j++) { int x = 2 * i - 1, y = 2 * j - 1; if (__gcd(x, y) == 1) { int a[3] = {(x * x + y * y) / 2, x * y, (y * y - x * x) / 2}; sort(a, a + 3); if (a[2] > 1000)continue; if (G.size() < 100) G.insert(GG(a[0], a[1], a[2])); } } for (GG g: G)cout << g.x << " " << g.y << " " << g.z << endl; } int main() { solve(); return 0; }
|