欧拉计划第3题:Largest prime factor(质因数分解)

本文介绍了如何使用直接质因数分解法找到600851475143的最大质因数,详细阐述了算法流程和其时间复杂度为O(n)或O(sqrt(n))。提供了一个C++代码示例来演示求解过程。

Problem 3:Largest prime factor

标签:质因数分解

原文:The prime factors of 131951319513195 are 555, 777, 131313 and 292929.

What is the largest prime factor of the number 600851475143600851475143600851475143?

翻译131951319513195 的质因数包括 555777131313292929

600851475143600851475143600851475143 的最大质因数是多少?

题解:直接质因数分解进行求解即可,时间复杂度为 O(n)O(\sqrt n)On

算法流程:扫描 2−n2−\sqrt n2n 的每个数 xxx,若 xxx 能整除 nnn,则从 nnn 中除掉所有质因子 xxx

上述算法 保证一个合数的因子一定在扫描到这个合数之前除掉了,所以这个过程中所得到的能整除 nnn 的一定是质数。时间复杂度为O(n)O(\sqrt n)On

代码

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    ll n = 600851475143, mx = 0;
    for (ll i = 2; i <= sqrt(n); i++) {
        while (n % i == 0) {
            n /= i;
            mx = max(mx, i);
        }
    }
    if (n > 1) mx = max(mx, n);
    cout << n << endl;
    return 0;
}

“Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics.”

“欧拉计划的存在,是为了每个对数学感兴趣的人,鼓励他们,挑战他们,并最终培养他们的能力与乐趣。”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值