题解 | #质数因子#

质数因子

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

此题通过从2开始去找数n的质因数,用例输入2000000014过不了,因为2000000014的质因数为2和1000000007,后面是一个非常大的素数,在for循环中就相当于直接遍历1000000007了,会超时。通过引入判断是否为素数来进行优化。素数的判断也是经过了优化的,参考我的另一篇文章《利用孪生素数判断是否为素数》,地址:https://blog.nowcoder.net/n/52c9640ea14a4330a842e783429698b5

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

using namespace std;

bool is_prime(long n)
{
    if(n==2 || n==3) return false;
    if(n%6!=1 && n%6!=5) return false;

    //到这里,留下来的n只可能是6N+1或者6N+5;
    long div = 5;
    long t = n/div;
    while(t>=div)
    {
        //n可能是(6N+1)与(6N+5)两个因子的乘积,故需要在这里进行判断;
        if(n%div==0 || n%(div+2)==0) return false;
        div += 6;
        t = n/div;
    }
    return true;
}

void fun(long n)
{
    for(long i=2;i<=n;i++)
    {
        //用例输入2000000014过不了,这里通过判断是否为素数来提前结束;
        if(is_prime(n))
        {
            printf("%ld",n);
            return;
        }

        while(n % i == 0)
        {
            printf("%d ",i);
            n /= i;


        }
    }
}

int main()
{
    long n;
    while(scanf("%ld",&n) != EOF)
    {
        fun(n);
    }
    return 0;
}
全部评论

相关推荐

10-15 03:05
门头沟学院 Java
CADILLAC_:凯文:我的邮箱是死了吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
442405次浏览 4511人参与
# 春招别灰心,我们一人来一句鼓励 #
41942次浏览 531人参与
# 阿里云管培生offer #
120240次浏览 2220人参与
# 地方国企笔面经互助 #
7962次浏览 18人参与
# 同bg的你秋招战况如何? #
76670次浏览 561人参与
# 虾皮求职进展汇总 #
115613次浏览 886人参与
# 北方华创开奖 #
107431次浏览 599人参与
# 实习,投递多份简历没人回复怎么办 #
2454658次浏览 34857人参与
# 实习必须要去大厂吗? #
55771次浏览 961人参与
# 提前批简历挂麻了怎么办 #
149901次浏览 1977人参与
# 投递实习岗位前的准备 #
1195935次浏览 18548人参与
# 你投递的公司有几家约面了? #
33206次浏览 188人参与
# 双非本科求职如何逆袭 #
662208次浏览 7394人参与
# 如果公司给你放一天假,你会怎么度过? #
4753次浏览 55人参与
# 机械人春招想让哪家公司来捞你? #
157628次浏览 2267人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11561次浏览 287人参与
# 发工资后,你做的第一件事是什么 #
12704次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35804次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20126次浏览 240人参与
# 我的上岸简历长这样 #
452016次浏览 8088人参与
# 实习想申请秋招offer,能不能argue薪资 #
39299次浏览 314人参与
# 非技术岗是怎么找实习的 #
155868次浏览 2120人参与
牛客网
牛客企业服务