#include<bits/stdc++.h>
using namespace std;
#define int long long
#define elif else if
int N,T;
int wynik = 0 ;
set<int>ca;
int pr(int I , int J , int K)
{
int lewy = 0 , prawy = N*N+1;
int srodek = (lewy+prawy)/2;
while(lewy+1!=prawy)
{
if (srodek <= (I*I+J*J+K+K))
{
lewy = srodek ;
}
elif(1)
{
prawy = srodek;
}
srodek = (lewy+prawy)/2;
}
return lewy;
}
void pre()
{
for (int i = 1 ; i <= N ;i ++)
{
ca.insert(i*i);
}
}
int pr(int x)
{
int lewy = 0 ;
int prawy = x+1 ;
int srodek = (lewy+prawy)/2;
while(lewy!=prawy-1)
{
if (srodek*srodek <= (N*N-x*x))
{
lewy = srodek;
}
elif(1)
{
prawy = srodek;
}
srodek = (lewy+prawy)/2;
}
return lewy ;
}
int pr_2 (int x, int y)
{
int lewy = 0 ;
int prawy= y+1 ;
int srodek = (lewy+prawy)/2;
while(lewy+1!=prawy)
{
if(srodek*srodek <= (N*N-x*x-y*y))
{
lewy = srodek;
}
elif(1)
{
prawy = srodek;
}
srodek = (lewy+prawy)/2;
}
return lewy;
}
int32_t main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N ;
pre();
for (int i = 1 ; i <= N ; i ++ )
{
for (int j = 1 ; j <= pr(i) ; j ++)
{
for (int k = 1 ; k <= pr_2(i,j) ; k ++)
{
if (ca.count(((i*i)+ (j*j) + (k*k))) == true)
{
//cout << "[" << pr(i,j,k)<< "]\n";
//cout << i << " " << j << " " << k << "\n" ;
if (i != j && k != j)
{
wynik += 3 ;
}
elif (i == j && j == k)
{
wynik += 1 ;
}
elif(1)
{
wynik += 2 ;
}
}
}
}
}
cout << wynik << "\n" ;
}
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include<bits/stdc++.h> using namespace std; #define int long long #define elif else if int N,T; int wynik = 0 ; set<int>ca; int pr(int I , int J , int K) { int lewy = 0 , prawy = N*N+1; int srodek = (lewy+prawy)/2; while(lewy+1!=prawy) { if (srodek <= (I*I+J*J+K+K)) { lewy = srodek ; } elif(1) { prawy = srodek; } srodek = (lewy+prawy)/2; } return lewy; } void pre() { for (int i = 1 ; i <= N ;i ++) { ca.insert(i*i); } } int pr(int x) { int lewy = 0 ; int prawy = x+1 ; int srodek = (lewy+prawy)/2; while(lewy!=prawy-1) { if (srodek*srodek <= (N*N-x*x)) { lewy = srodek; } elif(1) { prawy = srodek; } srodek = (lewy+prawy)/2; } return lewy ; } int pr_2 (int x, int y) { int lewy = 0 ; int prawy= y+1 ; int srodek = (lewy+prawy)/2; while(lewy+1!=prawy) { if(srodek*srodek <= (N*N-x*x-y*y)) { lewy = srodek; } elif(1) { prawy = srodek; } srodek = (lewy+prawy)/2; } return lewy; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cin >> N ; pre(); for (int i = 1 ; i <= N ; i ++ ) { for (int j = 1 ; j <= pr(i) ; j ++) { for (int k = 1 ; k <= pr_2(i,j) ; k ++) { if (ca.count(((i*i)+ (j*j) + (k*k))) == true) { //cout << "[" << pr(i,j,k)<< "]\n"; //cout << i << " " << j << " " << k << "\n" ; if (i != j && k != j) { wynik += 3 ; } elif (i == j && j == k) { wynik += 1 ; } elif(1) { wynik += 2 ; } } } } } cout << wynik << "\n" ; } |
English