题解 | #质数因子# 他人思路+注释

质数因子

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

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    long n;
    cin >> n;
    for(int i=2; i<=sqrt(n); i++){
        // 此处的while而不是if保证了遇见一个质数因子就排除所有,防止后面出现合数
        // 注意这里i的取值是从小到大的,而且上限为n的开放,这种从下到大的顺序再配合while  就可以找到所有的质数!!
        while(n % i == 0){
            cout << i << ' ';
            n /= i;
        }
    }
    // 如果n本身就是一个质数,又因为题目中不把1视为质数,所以有如下代码判断n本身是否为质数
    // n如果是质数,上面的过程不影响n的取值,否则n一定为1
    if(n > 1){
        cout << n << ' ';
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务