题解 | #质因数的个数#

质因数的个数

https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9

方法一:对于每个输入都通过遍历方式寻找质因数

#include <stdio.h>
#include <cmath>

int main()
{
    int s,i,count;
    while(scanf("%d",&s)!=EOF)
    {
        count=0;
        int bound=sqrt(s);
        for(i=2;i<=bound;i++)
        {
            while(s%i==0)
        {
            count++;
            s=s/i;
        }
    }
        if(s>1)
            printf("%d\n",count+1);
        else 
            printf("%d\n",count);

    }
    return 0;
}

方法二:首先通过一维数组筛选出全部素数

#include <initializer_list>
#include <iostream>
#include "vector"
#include "cmath"
using namespace std;

int main() {
    int N;
    int MAXN = sqrt(1e9) + 1;
    vector<int> prime;
    bool isPrime[MAXN];

    for (int i = 0; i < MAXN; i++) {
        isPrime[i] = true;
    }
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i < MAXN; i++) {
        if (!isPrime[i]) {
            continue;
        }
        prime.push_back(i);
        for (int j = i * i; j < MAXN; j += i) {
            isPrime[j] = false;
        }
    }
    while (cin >> N) { // 注意 while 处理多个 case
        // cout << a + b << endl;

        int num = 0;
        for (int i = 0; i < prime.size() && prime[i] < N; i++) {
            int zys = prime[i];
            while (N % zys == 0) {
                N /= zys;
                num++;
            }
        }
        if (N > 1) num++;
        cout << num << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:48
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务