https://www.nowcoder.com/pat/2/problem/264
吐槽:必须要先计算好,然后直接输出,不然会超时。
主要是两个函数,一个素数表,一个因子个数

#include<cstdio>
#define N 100005
int p[N]={0};
int prime[N];
int k=0;
int f[N];
void prime_table(){
    for(int i=2;i<N;i++){
        if(p[i]==0){
            prime[k++] = i;
            for(int j =i+i;j<N;j+=i){
                p[j] = 1;
            }
        }
    }
}
void ff(){
        for(int t = 2;t < N; t++){
        int num = 0,tmp = t;
        for(int i=0;prime[i] <= t;i++){
            if(tmp % prime[i] == 0){
                num++;
                tmp /= prime[i];
                while(tmp%prime[i]==0){
                    tmp /= prime[i];
                }
            }
            if(tmp == 1) break;
        }
        f[t] = num; 
    }
}
int main(){
    int n;
    prime_table();
    ff();
    while(scanf("%d",&n) != EOF){
        printf("%d\n",f[n]);
    }
    return 0;
}