文章

3

粉丝

0

获赞

17

访问

352

头像
质因数个数 题解:合数分解
P1156 清华大学上机题
发布于2026年2月4日 19:48
阅读数 76

关键点:

  1. 当 n < 1e9 时并不会存在两个 大于 1e6 的质因数,因此 预先求 1e6 内的所有质因数,当某个合数可分解为一个 大于 1e6 的质因数,则剩余的质因数都必然小于 1e6 ,则可以被分解为质因数

  2. (30行的含义)n == 1, 被完全分解了。 n > 1 且完全无法分解,那么是质数,也是返回1. n > 1 可以部分分解,剩余一个大于 1e6 的质因数则也是一样

    #include <iostream>
    #include <vector>
    #include <math.h>
    using namespace std;
    
    const int MAX = 1e6 + 5;
    int flag[MAX];// 0 素 1合.
    int main(){
        int n;
        vector<int> prime;
        for(int i = 2; i < MAX; i++){
            if(flag[i] == 0){
                prime.push_back(i);
                for(int j = 2; i * j < MAX; j++){
                    flag[i * j] = 1;
                }
            }
        }
    
        while(cin >> n){
            // 素数则直接输出1,合数则判断一下
            int factorCount = 0;
            int i = 0;
            for(int i = 0; i < prime.size(); i++){
                while(n % prime[i] == 0){
                    n /= prime[i];
                    factorCount++;
                }
            }
            // n == 1, 被完全分解了。 n > 1 且完全无法分解,那么是质数,也是...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发