【数论】Visible Lattice Points
#include <bits/stdc++.h> using namespace std; const int maxn=1100; typedef long long ll; ll phi[maxn],ans,prime[maxn],n,tot; bool vis[maxn]; void get_euler(ll n) { phi[1]=1; for (int i=2; i<=n; i++) { if (!vis[i]) { prime[tot++]=i; phi[i]=i-1; } for (int j=0; j<tot&&1ll*prime[j]*i<=n; j++) { vis[prime[j]*i]=1; if (i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; break; } phi[i*prime[j]]=phi[i]*phi[prime[j]]; } } } int main() { int _,k=0; scanf("%d",&_); get_euler(1100); while (_--) { k++; ans=0; scanf("%lld",&n); for (int i=1; i<=n; i++) { ans+=phi[i]; } printf("%d %lld %lld\n",k,n,ans*2+1); } }