A. 完全数
完全数
https://ac.nowcoder.com/acm/contest/8997/A
A. 完全数
没想太多,看到求因子和就想到了唯一分解定理,写个线性筛,套个求因子和的函数即可。
不懂的可以看一眼我之前的文章。-> 戳
#include <bits/stdc++.h> #define ll long long const int N=1e6+5; int cnt, prime[N], pre[N]; bool flag[N]; using namespace std; void init() { memset(flag,1,sizeof(flag)); flag[1]=cnt=0; for(int i=2;i<=N;i++) { if(flag[i]) { prime[++cnt]=i; pre[i]=cnt; } for(int j=1;j<=cnt&&prime[j]*i<=N;j++) { flag[prime[j]*i]=0; if(i%prime[j]==0)break; } } } ll get_yin_zi_sum(ll n) { ll ans = 1; for(int i = 1; (ll) prime[i] * prime[i] <= n; i++){ if(!(n % prime[i])) { ll jet = 1, sum = 1; while( !(n % prime[i]) ) { jet *= prime[i]; sum += jet; n /= prime[i]; } ans *= sum; } } if(n > 1) ans *= (n + 1); return ans; } void solve() { ll x; scanf("%lld", &x); ll y = get_yin_zi_sum(x) - x; if(x == y) puts("Pure"); else if(y < x) puts("Early"); else puts("Late"); } int t; int main() { init(); solve(); return 0; }