文章

61

粉丝

137

获赞

18

访问

38.5k

头像
求大佬帮我康康哪里有问题,准确率只有75
P1156 清华大学上机题
发布于2024年3月2日 16:04
阅读数 700

#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
int str[N] = {0};   //0表示是素数
int primenumber[N];
int pncount = 0;


int main(){
    int n;
    str[0] = 1;
    str[1] = 1;
    //预先求出N以内的素数
    for(int i = 2 ;i <= sqrt(N) ;i++){
        if(str[i] == 0){
            primenumber[pncount++] = i;
            for(int j = 2 ;i*j < N ;j++)
                str[i*j] = 1;
        }
    }
    while(cin >> n){
        int num = 0;
        for(int i = 0 ;i < pncount ;i++){
            if(n == 1)  break;      //质因数分解完了
            while(n % primenumber[i] == 0){
                num++;
                n /= primenumber[i];
            }
        }
        if(n != 1)
            num++;
        cout << num << endl;
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

1 条评论
snake VIP
2024年3月2日 17:05

N最大是10^9,这个题不需要素数筛选,直接判定就可以

赞(0)