wugang0131 2022-08-27 12:50 采纳率: 100%
浏览 368
已结题

Python实现求n的n次方的后三位怎么求(99999<n<999999)

Python实现求n的n次方的后三位怎么求(99999<n<999999)

** 重点:无法使用以下代码 **

n = int(input())
n = str(n ** n)
print(n[-3:])
  • 写回答

7条回答 默认 最新

  • PENGCM 2022-08-27 14:40
    关注

    整数的后三位,实质上就是模运算,相当于 mod 1000,
    所以这是一个快速幂的模运算的算法问题,
    只需要模运算结果,并不需要完整的中间结果。

    模运算与基本四则运算有些相似,但是除法例外。其规则如下:
    (a + b) % p = (a % p + b % p) % p
    (a - b) % p = (a % p - b % p) % p
    (a * b) % p = (a % p * b % p) % p
    (a^b) % p = ((a % p)^b) % p

    推论:
    若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);
    若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);
    若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
    (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p);

    费马定理:若p是素数,a是正整数且不能被p整除,则:a^(p-1) mod p = 1 mod p
    推论:若p是素数,a是正整数且不能被p整除,则:a^p mod p = a mod p

    def pow(base, exp, mod):  # python的内部函数,使用快速幂算法
        result = 1
        while exp:
            if exp & 1:
                result *= base
                result %= mod
            base *= base
            base %= mod
            exp >>= 1
        return result
    
    n = int(input('输入正整数: '))
    n = pow(n, n, 1000)
    print(n)
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月27日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么