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;
}