#include<bits/stdc++.h> usingnamespace std; #ifdef LOCAL #define debug(...) fprintf(stdout, ##__VA_ARGS__) #else #define debug(...) void(0) #endif #define int long long inlineintread(){int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+ (x<<3)+(ch^48);ch=getchar();}return x*f;} #define Z(x) (x)*(x) #define pb push_back #define fi first #define se second //#define M //#define mo #define N 1000000 int n, m, i, j, k, T; int mu[N], pri[N], L, ans1, ans2; int z[N], top, smu[N]; int sph[N], phi[N]; map<int, int>Phi, Mu;
intfind_mul(int n){ if(n <= L) return smu[n]; if(Mu[n]) return Mu[n]; int ans = 1, l, r; for(l = 2, r = 0; l <= n; l = r + 1) { r = min(n, n / (n / l)); // debug("%lld --> %lld\n", n / l, n); ans -= find_mul(n / l) * (r - l + 1); } return Mu[n] = ans; }
intfind_phi(int n){ if(n <= L) return sph[n]; if(Phi[n]) return Phi[n]; int ans = (n + 1) * n / 2, l, r; for(l = 2, r = 0; l <= n; l = r + 1) { r = min(n, n / (n / l)); // debug("%lld --> %lld [%lld]\n", n / l, n, r - l + 1); ans -= find_phi(n / l) * (r - l + 1); } // debug("Phi[%lld] = %lld\n", n, ans); return Phi[n] = ans; }