题解 | #质数因子#

质数因子

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

#include <stdio.h>

int main() {

    //原理:
    //①质数(Prime Number):一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫作质数
    //②任何大于1的正整数都可以被拆分成多个质数相乘。
    //③一个数字n可以拆分成a*b,那么 a 或 b 至少有一个小于 根号n
    //1 1*1     1是没有质数因子的,题目有问题
    //2 1*2     2的质数因子是2
    //3 1*3
    //4 2*2
    //5 1*5
    //6 2*3
    //15 3*5
    //180 2*2*3*3*5
    //...

    unsigned int num = 0;
    scanf("%u", &num);

    //以下方发超时
    // unsigned int i =0;
    // for (i = 2; i <= num; i++) {
    //     if (num%i == 0) { //能被i取余,说明能够被i整除
    //         while(num%i == 0) {
    //             //把所有 i的因子的数字都取出,
    //             //例如:i=2; 要把是2的因子都去掉;这样i=4是,num就整除不了了
    //             printf("%u ", i);
    //             num /= i;
    //         }
    //     }
    // }

    unsigned int i = 0;
    for (i = 2; i*i <= num; i++) {//一个数字n可以拆分成a*b,那么 a 或 b 至少有一个小于 根号n
        if (num % i == 0) { //能被i取余,说明能够被i整除
            while (num % i == 0) {
                //把所有 i的因子的数字都取出,
                //例如:i=2; 要把是2的因子都去掉;这样i=4是,num就整除不了了
                printf("%u ", i);
                num /= i;
            }
        }
    }

    if (num !=1) { //num != 1说明没被除尽,还有一个大于 根号n 的因子,即是num
        printf("%u", num);
    }
    return 0;
}

收获点:

做不出来的原因是数学知数不过关,原理:

①质数(Prime Number):一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫作质数

②任何大于1的正整数都可以被拆分成多个质数相乘。

③一个数字n可以拆分成a*b,那么 a 或 b 至少有一个小于 根号n

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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