数学问题II

六.素数筛法

素数:只能被自身和1整除的大于1的正整数。

确定一个数是否是素数:

在[2,sqrt(n)]中,所有正整数均不能整除n,则可以判定n为素数。

时间复杂度:O(sqrt(n))

素数筛法:

    从2开始遍历2到1000000的所有整数,若当前整数没有因为它是某一个小于它的素数的倍数而被标记为非素数,则判定其为素数,并标记所有它的倍数为非素数。然后继续遍历下一个数,直到遍历完2到1000000区间内所有的整数。此时,所有没有被标记成非素数的数字即为我们要求的素数。这种算法称为素数筛法。

七.分解素因数

     对一个数 x 分解素因数,即确定素数p1,p2,p3,...pn,使得x = p1^{e1}*p2^{e2}*p3^{e3}*...*pn^{en},必要时还需要确定e1,e2,e3,...en.

    对正整数n分解素因数的步骤:

1.有素数筛法求出[1,sqrt(n)]区间内所有的素数

2.对素数进行遍历。若某一个素数模n为0,则不断将n除以该素数,直至无法整除,同时计算器幂指数

3.若在完成某个素数的幂指数计算后,n==1,则不必再测试之后的素数,分解素因数提前结束

4.若遍历、分解、测试完所有的素数后,n仍旧没有被除为1,则说明n存在一个大于sqrt(n)的因数,其必为素因数且其幂指数为1.

 

BTW,当得出整数n的所有素因数的幂指数后,可以得出该整数的所有因数的个数为:(e1+1)*(e2+1)*(e3+1)*...*(en+1)

八.二分求幂

快速求得a的b次方。

将b进行二进制转换得到b的二进制数,假设b==5,因为:(5)_{10}=(101)_{2},所以有:b=2^{0}+2^{2},则有:a^{b}=a^{2^{0}}*a^{2^{2}}=a^{1}*a^{4}。根据此方法,可以将求a的b次方转为求a的1次方与a的4次方的乘积。

九.高精度整数

BigInteger类:https://docs.oracle.com/javase/8/docs/api/

BigDecimal类:https://docs.oracle.com/javase/8/docs/api/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值