题解 | #明明的随机数#

质数因子

http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

正整数中质数有无穷多个。某个数的质因数是有限的,而且除了最大的质因数,其他质因数的大小不会超过该数开方。最坏的情况就是总共有两个质因数,每个质因数都是最大质因数,那么该质因数就达到了上限:原数的开方。所以解题思路为遍历2到该数开方的数,将原数依次相除,每个数都除到有余数为止;那么其中非质因数的数相当于不会遍历到。直到最后剩下一个最大质因数或者1。
#include<bits/stdc++.h>
using namespace std;

int main(){
    unsigned int n;
    cin >> n;
    for (int i = 2; i <= sqrt(n); ++i){
        while(n % i == 0){
            cout << i << ' ';
            n = n / i;
        }
    }
    if(n != 1)
        cout << n;
    return 0;
}


全部评论
本题硬核公理: 某个数的质因数是有限的,而且除了最大的质因数,其他质因数的大小不会超过该数开方
1 回复 分享
发布于 2022-06-13 08:09
他的示例里没有1,但题目的范围里是1,这段代码在cin >> n后还需要加if(n == 1) return 1; 这样自测示例里填1就可以得出1,否则为空无结果
点赞 回复 分享
发布于 2023-05-15 16:23 上海

相关推荐

点赞 评论 收藏
分享
评论
8
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务