思路:模拟

根据题意,我们需要求出给定 的所有除自己以外的约数并求和,最后判断元素和 是否等于给定元素 ,由于给定 的范围最大到 ,所以找约数时找到 即可。特别地,为了保证 为完全平方数时不重复计算平方根,在加和时需要特判。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
    ll n;
    cin >> n;
    ll sum = 0;
    for(int i = 2; i <= n / i; i++) {
        if(n % i == 0) {
            if(i * i == n) {
                sum -= i;
            }
            sum += i;
            sum += n / i;
        }
    }
    if(sum + 1 == n) {
        cout << "Pure";
    } else if(sum + 1 > n) {
        cout << "Late";
    } else {
        cout << "Early";
    }
}

复杂度分析

时间复杂度:
空间复杂度: