质数因子

质数因子

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

解题思路

这题有点恶心啊。
分解质因数,从最小的开始不停除法,除到为1。或者,除到最后除不了,就输出自己。

两个坑。第一个就是这个数本身是个质数。第二就是可能会超时,除到它的平方值即可。
还可以判断下除数是不是质数,但是呢,没必要,因为会增加判断的次数,得不偿失。

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

int main()
{
    long num = 0;
    int i;

    while (scanf("%ld", &num) != EOF) {
        int maxi = sqrt(num);
        for (i = 2; i <= maxi; i++) {
            while (!(num % i)) {
                num /= i;
                printf("%d ", i);
            }
        }
        if (num != 1) {
            printf("%d ", num);
        }

        printf("\n");
    }
    return 0;
}
全部评论
为什么除到平方根就可以了呢
1 回复 分享
发布于 2022-01-01 20:30
雀氏没必要,比如你害怕4或者是9作为它的因数被输出,但是在while循环里不断地n%i==0,而i每次都从2开始的,所以4会被两个2代替,9会被两个3代替。所以没有必要判断素数。
1 回复 分享
发布于 2022-04-21 20:39
没必要平方根吧,实时计算maxi就行了,每一次maxi就是余数
点赞 回复 分享
发布于 2022-06-21 23:11
为什么没必要判断除数是不是质数呀
点赞 回复 分享
发布于 2022-03-22 15:01
用平方根很好的降低了计算时间,没有超时
点赞 回复 分享
发布于 2021-10-27 14:56

相关推荐

迷茫的大四🐶:干脆大厂搞个收费培训得了,这样就人均大厂了
点赞 评论 收藏
分享
10-21 16:54
门头沟学院 Java
后端转测开第一人:微服务没用 校招都不看微服务的 还有就是后端行情是这样的 找实习纯看运气 秋招更是吃运气和缘分 如果对代码没有极致的追求 可以转测开
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
62
5
分享

创作者周榜

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