Editorial for Bedao Mini Contest 17 - SUMSQUARE
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Nhận xét các giá trị của ~a~ và ~b~ đều không vượt quá ~sqrt(k)~ nên ta có thể duyệt qua mọi ~a~ từ ~0~ đến ~sqrt(k)~ rồi đếm xem có bao nhiêu ~a~ có ~b~ nguyên phù hợp với ~a~ đó .
Code mẫu
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; typedef pair<ll, ll> ii; const int N = 1e5 + 7, MOD = 1e9 + 7; int n, a[N], f[N], g[N], num[N]; vector<int> adj[N]; int add(int x, int y) { x += y; if (x >= MOD) x -= MOD; return x; } int mul(int x, int y) { return 1ll * x * y % MOD; } int sub(int x, int y) { x -= y; if (x < 0) x += MOD; return x; } int fexp(int x, int y) { int ans = 1; for (; y; y >>= 1, x = mul(x, x)) if (y & 1) ans = mul(ans, x); return ans; } int inv(int x) { return fexp(x, MOD - 2); } ll k; ll cal(long long k) { int dem = 0 ; for(long long i=1; i*i <= k; i++) { long long x = k - i*i; x = sqrt(x); if(x*x + i*i == k) dem++; } return dem; } ll sumSquares(long long k) { int ans = 0; if((long long) sqrt(k) * (long long) sqrt(k) == k) ans++; return ans + cal(k); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); // freopen("test.inp", "r", stdin); // freopen("test.out", "w", stdout); cin >> k; cout << cal(k); }
Comments