题解 | #质数因子#

质数因子

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

#include <math.h>
#include <stdio.h>

int main() {
    int i = 0;
    int num;
    scanf("%d", &num);

    // if ((num < 1) || (num > (2*10E9 + 14))) {
    //     return 1;
    // }

    for (i = 2;; i++) {
        // 1 既不是质数,也不是合数
        if (num == 1) {
            printf("\n");
            break;
        }

        // 每次进入新的循环时,都是要获取 num 的最小质因数
        // 此时的 num 必然不可能被小于 i 的值整除
        // 因此最小质因数必然大于等于 i

        if (i > sqrt(num)) {
            // 对于合数,最小质因数必然小于本身的算数平方根,因此进入此条件必然不可能是合数
            // 对于质数,最小质因数就是它本身
            printf("%d\n", num);
            break;
        }

        while (num % i == 0) {
            printf("%d ", i);
            num = num/i;
        }
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务