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
| #include <bits/stdc++.h> using namespace std; typedef long long ll; #define N 500022 int prime[N],cnt; bool vis[N]; int num[N],e[N]; void init() { for(int i=2;i<=N;++i) { if(!vis[i]) { prime[++cnt]=i; num[i]=i+1; e[i]=1; } for(int j=1;j<=cnt;++j) { if(prime[j]*i>N) break; vis[prime[j]*i]=true; if(i%prime[j]==0) { num[i*prime[j]]=num[i]*prime[j]+e[i]; e[i*prime[j]]=e[i]; break; } num[i*prime[j]]=num[i]*(prime[j]+1); e[i*prime[j]]=num[i]; } } } int main() { int T; init(); scanf("%d",&T); while(T--) { int n; scanf("%d",&n); printf("%lld\n",num[n]); } }
|