欧拉计划3-找出一个合数的最大质数因子

博客介绍了如何找到一个合数的最大质数因子,通过分析600851475143的例子,阐述了从最小质数开始除以原数,不断更新最大质因子的方法,从而避免了高时间复杂度的遍历。同时提到了使用unsigned long long类型处理大整数的重要性。
摘要由CSDN通过智能技术生成

题目:

13195 的质数因子有 5, 7, 13 和 29。

600851475143 的最大质数因子是多少?

分析:刚开始写的时候,很麻烦,首先写了一个prime函数,然后又在主函数里写了一个循环来更新max(循环i从2到n,找出n的每一个质因数),这样一来,对于这道题,即便是long long类型有可能输出,但时间复杂度太高,效率太慢。

然后通过在网上了解到,任何一个合数都是可以由他的所有质因素相乘得到的,比如15=3*3*3*3*3,12=2*2*3,60=2*2*3*5。好的,我们先看一个比较小的数60,现在我们要找它的最大质因子,我们可以从最小数开始,从小数除起可以确保该数为质数,所以不必判断是否为质数,如果余数为零,那么它就是其中一个质因子。然后原数就可以除这个因子了,为了排除已经找到的因子,我们一直将它除这个数,直到不能整除,60/=2得30,30/=2得15,到此结束此因子,我们就找到了2这个质因子;同理,到3的时候15/=3得5,找到了3这个质因子;5/5=1,可以结束,5就是我们要找的最大质因子啦。

#include <stdio.h>
int main()
{
    long long i,n;
    scanf("%lld",&n);
    for(i = 2; i <= n; i ++)/*从小数除起可以确保该数为质数所以不必判断是否为质
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值