MATLAB--190720--欧拉计划(三)


本人为MATLAB小菜鸟,本博客作为阶段学习的小总结,欢迎大家学习交流!
题目三
在这里插入图片描述
题目意思是求一个较大的数的最大质因数,传统的方法求解比较麻烦,运算速度较慢。质因数,顾名思义,一方面是因数,第二个方面是素数,也即质数。
思路
1.可以通过rem(x,y)==0首先判断是否为待求数的因数,不断刷新n的值。但这个过程i的值在不断的增大,这会造成输出的数不一定为最大的质因数,所以加入第二个循环,从2开始重新刷新,直到找出最后的一个不能再被整除的数,这个数就是最大质因数。
2.通过查阅,isprime(i)可以用来判断一个数是否为素数,是输出1,不是输出0。只要让i从2开始递增,能被i整除,且是素数,通过i的增加不断刷新找到最大质因数,但缺点是需要预设一个i的范围。
3.结合1和2,3为通用版的求出最大质因数的方法,首先判断i是否为素数和整除,是说明此时i为一个质因数(最小的),刷新n的值的同时,刷新i的值,i从当前的i值开始重新计算,直到计算出最后一个不能再被整除的数,这个数就是最大的质因数。
代码块
方法一

%方法一
%初步想法,较为复杂
clear;
i=2;
n= 600851475143;
while(i^2<=n)%n的值会发生改变,例如当初值n设置为28时,第二次循环时n已经变成了14,
    if(rem(n,i)==0)                           %输出为14,并不是最大的质因数。
        result=i;
        n=n/i;
    end
    i=i+1;
end
for x=2:sqrt(n)
    if(mod(n,x)==0)
        result=x;
        n=n/x;
    end
    x=x+1;
end
    result=n;
    disp('最大质因数:')
    result

方法二

%方法二
%参考的算法,有一定的弊端,对于较小的数i的范围需要修改
clear;
n=600851475143;
for i=2:100000
    if mod(n,i)==0&&isprime(i)
        result=i;
    end
end
result

方法三

%方法三
%利用isprime函数判断是否为素数的算法
clear;
i=2;
n=600851475143;
while(i^2<=n)%n的值会发生改变
       if(mod(n,i)==0&&isprime(i))
          result=i;
           n=n/i;
           i=result-1;
       end
       i=i+1;
end
  result=n;
  fprintf('最大质因数为:%d\n',result);

答案
最大质因数为:6857

最后,欢迎大家的批评指正,一起交流!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值