应用费马小定理快速求得大指数对p取模

11 篇文章 6 订阅
4 篇文章 0 订阅
费马小定理(Fermat’s little theorem)是数论中的一个重要定理,在1636年提出。如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快速幂超时

k = 998244353
def fpow(a, b):
    ans = 1
    while b > 0:
        if b % 2 == 1:
            ans = ans * a % k
        b //= 2
        a = a * a % k
    return ans
if __name__ == '__main__':
    n = int(input())
    if n % 2 == 0:
        print(fpow(6, n // 2))
    else:
        print(fpow(6, n // 2) * 4 % k)

费马小定理

这道题给出的那个取余的数是质数

mod = 998244353

def fpow(a, b):
    res = 1
    while b > 0:
        if b % 2:
            res = res * a % mod
        a = a * a % mod
        b //= 2
    return res

if __name__ == '__main__':
    n = int(input())
    ans = 1
    if n % 2:
        ans = 4
    n //= 2
    n %= (mod-1) # 直接根据费马小定理把n缩小
    ans = ans * fpow(6, n) % mod
    print(ans)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JdiLfc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值