#include <bits/stdc++.h>
using namespace std;
const int Base = 5 * 1e5 + 7;
const int GigaBase = 5 * 1e7;
int n;
int Potegi[Base];
// bitset<GigaBase> Sumy;
int Sumy[GigaBase];
int Ans;
void LiczPotegi()
{
for(int i = 1; i < Base; i++) {
Potegi[i] = (i * i);
}
}
void Preproces()
{
for(int i = 1; i < n; i++) {
for(int j = i; j < n; j++) {
Sumy[(Potegi[i] + Potegi[j])]++;
}
}
}
int main()
{
cin >> n;
LiczPotegi();
Preproces();
int K, H;
for(int k = 1; k <= n; k++) {
K = Potegi[k];
for(int h = 1; h < n; h++) {
H = Potegi[h];
if(H > K) break;
if(Sumy[K - H]) {
Ans += Sumy[K - H];
// cerr << k << " " << h << " (" << K << " " << H << ") " << (K - H) << "\n";
}
}
}
cout << Ans;
}
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <bits/stdc++.h> using namespace std; const int Base = 5 * 1e5 + 7; const int GigaBase = 5 * 1e7; int n; int Potegi[Base]; // bitset<GigaBase> Sumy; int Sumy[GigaBase]; int Ans; void LiczPotegi() { for(int i = 1; i < Base; i++) { Potegi[i] = (i * i); } } void Preproces() { for(int i = 1; i < n; i++) { for(int j = i; j < n; j++) { Sumy[(Potegi[i] + Potegi[j])]++; } } } int main() { cin >> n; LiczPotegi(); Preproces(); int K, H; for(int k = 1; k <= n; k++) { K = Potegi[k]; for(int h = 1; h < n; h++) { H = Potegi[h]; if(H > K) break; if(Sumy[K - H]) { Ans += Sumy[K - H]; // cerr << k << " " << h << " (" << K << " " << H << ") " << (K - H) << "\n"; } } } cout << Ans; } |
English