文章

85

粉丝

0

获赞

580

访问

17.1k

头像
质因数个数 题解:
P1156 清华大学上机题
发布于2026年3月5日 13:45
阅读数 233

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

const int maxn =10001;

int prime[maxn]={1};

void predeal() {
    for (int i = 0; i < maxn; i++) {
        prime[i] = 1;
    }

    // 0和1不是素数
    prime[0] = prime[1] = 0;
    // 埃氏筛法
    for (int i = 2; i <= sqrt(maxn); i++) {
        if (prime[i] == 1) {  // 如果i是素数
            for (int j = i * i; j < maxn; j += i) {
                prime[j] = 0;  // 将i的倍数标记为合数
            }
        }
    }
}

int main() {
    int n;
    predeal();
    while (scanf("%d",&n)!=EOF) {
        int counts =0;
        for (int i = 2; i <= n && i < maxn; i++) {
            if (prime[i] == 1) {
                while (n % i == 0) {
                    counts++;
                    n /= i;
                    // 去掉break,继续除直到不能整除
                }
            }
        }
        if (n>1) {
            counts++;
        }
        cout << counts << endl;
    }
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发