蓝桥杯 1. 四平方和
四平方和
原题目链接
题目描述
四平方和定理(又称拉格朗日定理)指出:
每个正整数都可以表示为 至多 4 个正整数的平方和。
如果将 0 包括进去,则每个正整数都可以恰好表示为 4 个非负整数的平方和。
例如:
5 = 0² + 0² + 1² + 2²
7 = 1² + 1² + 1² + 2²
对于一个给定的正整数,可能存在多种平方和表示法。
本题要求你对所有可能的表示法满足以下排序条件:
- 四个数满足
0 ≤ a ≤ b ≤ c ≤ d
- 对所有可能的
(a, b, c, d)
按照字典序(即联合主键)升序排列,输出第一个表示法。
输入描述
输入一个正整数 N
(N < 5 × 10⁶
)。
输出描述
输出一组符合条件的 4 个非负整数 (a b c d)
,中间用空格隔开,满足:
a² + b² + c² + d² = N
0 ≤ a ≤ b ≤ c ≤ d
- 为所有合法组合中字典序最小的一组
输入样例
12
输出样例
0 2 2 2
c++代码
#include<bits/stdc++.h>using namespace std;int main() {int N, m;cin >> N;for (int i = 0; i * i <= N; i++) {for (int j = 0; i * i + j * j <= N; j++) {for (int k = 0; i * i + j * j + k * k <= N; k++) {int res = N - i * i - j * j - k * k, m = (int)sqrt(res);if (m * m == res) {cout << i << " " << j << " " << k << " " << m;return 0;}}}}return 0;
}//by wqs