弱弱的数论推导 除法的可除尽性以及小数的循环节

                                                                   一

   问题是这样的,给出一个正整数A, B, 如果A/B的结果小数位数有限的(非无限循环小数)则称A/B是可以除尽的

    那么,朴素做法就是算余数,然后看余数是否存在循环节,判断它是不是可以除尽的,复杂度还是可以的。

    有没有更高端的算法呢?


    结论 : 1.对于2个互质的正整数A, B(B≠1),如果B含有除2,5以外的素因子,则A/B是不可以除尽的

                 2.对于2个不互质的正整数A, B, 只需要约分成2个互质的然后返回结论1即可。

    证明和推导就很简单了,我们可以模拟手算除法的过程,每一次将A/B得到一个余数,然后余数*10再与B进行mod运算,因为A,B互质,所以如果要使一次计算的余数为0,那么B一定是2或5的倍数,这可以看成是余数每次多一个2和5的素因数因子,B是2或5的倍数就保证了总有一次计算使得余数的2,5因子乘积可以被B整除,余数就变成了0

    上述算法只需要做一次gcd,然后判断B/gcd(A,B)是否仅含有2和5的素因子即可。另一种做法是素因数分解,细节的话YY一下就好了。

    推论的话就是如果B的素因子仅含有2和5,那么A/B是一定可以除尽的,算物理数学题很有用的结论。

    思考:任取2个正整数A和B,则它们可以除尽的概率是多少?(这个我也没YY出来)

 

                                                                     二

    如果A/B可以除尽,那么循环节的长度是多少呢?(挖坑中)

    第二个问题是A/B若不可以除尽,那么循环节的长度是多少呢?

    比如说5/3的结果是1.6666666……  显然循环节的长度是1。

    既然牵扯到循环节我们便可以暴力模拟算,时间复杂度还是可以接受的。

    那有没有更好的算法呢?

    我们观察到 10 mod 3 = 1, 10*10 mod 3 = 1, 10*10*10 mod 3 = 1

    这里就是欧拉定理的东西了

           也就是   a^φ(B) ≡ 1 (mod B)    ←← 欧拉定理

            那么  10^φ(B) ≡ 1 (mod B)  (前提:10和B是互质)

     φ(B)是欧拉函数,表示小于B的正整数中与B互质的正整数的个数

     我们可以想一下,如果10和B互质,意味着B中没有2和5的因子,因为不可以被除尽,那么B中肯定没有2和5的因子,所以10与B互质,那么我们就得到了一个大致的循环节,这个循环节的长度为φ(B)-1.

      证明在这里←←

         因为10^φ(B) ≡ 1 (mod B), 所以10^2φ(B) ≡ 1 (mod B)

         φ(B)到2φ(B)-1是一个循环节,所以循环节的长度为φ(B)-1。

        不过这只是一个大致的循环节,可以保证它是一个循环节,但是无法证明它是最小循环节,啊。。这个还是过几天再填坑吧,有大神的话可以想一下告诉我答案~

        后方施工中= = ~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值