Skip to content

Commit 64beea2

Browse files
authored
Merge pull request #153 from AlgorithmWithGod/khj20006
[20250220] BOJ / G5 / 라그랑주의 네 제곱수 정리 / 권혁준
2 parents 3a4db2d + e89c689 commit 64beea2

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
```cpp
2+
3+
#include <iostream>
4+
#include <algorithm>
5+
#include <vector>
6+
using namespace std;
7+
8+
int main()
9+
{
10+
cin.tie(0)->sync_with_stdio(0);
11+
12+
int N;
13+
for (cin >> N; N; cin >> N) {
14+
15+
vector<int> A;
16+
int ans = 0;
17+
for (int i = 1; i*i <= N; i++) A.push_back(i*i);
18+
int M = A.size();
19+
20+
// 1
21+
if (A.back() == N) ans++;
22+
// 2
23+
for (int i = 0; i < M; i++) for (int j = i; j < M; j++) if (A[i] + A[j] == N) ans++;
24+
// 3
25+
for (int i = 0; i < M; i++) for (int j = i; j < M; j++) {
26+
if (A[i] + A[j] >= N) break;
27+
ans += upper_bound(A.begin() + j, A.end(), N - A[i] - A[j]) - lower_bound(A.begin() + j, A.end(), N - A[i] - A[j]);
28+
}
29+
// 4
30+
for (int i = 0; i < M; i++) for (int j = i; j < M; j++) for (int k = j; k < M; k++) {
31+
if (A[i] + A[j] + A[k] >= N) break;
32+
ans += upper_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]) - lower_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]);
33+
}
34+
35+
cout << ans << '\n';
36+
}
37+
38+
}
39+
40+
```

0 commit comments

Comments
 (0)