#include <bits/stdc++.h> using namespace std; int roznice[13000000]; int wyszukaj_l(int * tab, int n, int szuk){ int l = 0, p = n-1, s; while(l < p){ s = (l+p)/2; if(szuk > tab[s]) l = s + 1; else p = s; } if (tab[l] == szuk) return l; return -1; } int wyszukaj_p(int * tab, int n, int szuk){ int l = 0, p = n-1, s; while(l < p){ s = (l+p + 1)/2; if(szuk >= tab[s]) l = s; else p = s - 1; } if (tab[l] == szuk) return l; return -1; } int main() { int n,licznik = 0, n2, i2, j2, k2, i , j, k = 0, l, p; cin >> n; for(i = 2; i <= n;i++){ for(j = 1; j < i; j++) roznice[k++] = i*i - j*j; } sort(roznice,roznice + k); //for(i = 0; i < k; i++) cout << roznice[i] <<" "; n2 = n*n; for(i = 1; i <= n; i++){ i2 = i*i; for(j = i; j*j <= n2 - i2; j++ ){ j2 = j*j; l = wyszukaj_l(roznice,k,i2+j2); if (l > -1) { p = wyszukaj_p(roznice,k,i2+j2); //cout<<i <<" "<<j<<" " << endl; licznik += p - l + 1; } } } cout << licznik; return 0; }
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; int roznice[13000000]; int wyszukaj_l(int * tab, int n, int szuk){ int l = 0, p = n-1, s; while(l < p){ s = (l+p)/2; if(szuk > tab[s]) l = s + 1; else p = s; } if (tab[l] == szuk) return l; return -1; } int wyszukaj_p(int * tab, int n, int szuk){ int l = 0, p = n-1, s; while(l < p){ s = (l+p + 1)/2; if(szuk >= tab[s]) l = s; else p = s - 1; } if (tab[l] == szuk) return l; return -1; } int main() { int n,licznik = 0, n2, i2, j2, k2, i , j, k = 0, l, p; cin >> n; for(i = 2; i <= n;i++){ for(j = 1; j < i; j++) roznice[k++] = i*i - j*j; } sort(roznice,roznice + k); //for(i = 0; i < k; i++) cout << roznice[i] <<" "; n2 = n*n; for(i = 1; i <= n; i++){ i2 = i*i; for(j = i; j*j <= n2 - i2; j++ ){ j2 = j*j; l = wyszukaj_l(roznice,k,i2+j2); if (l > -1) { p = wyszukaj_p(roznice,k,i2+j2); //cout<<i <<" "<<j<<" " << endl; licznik += p - l + 1; } } } cout << licznik; return 0; } |