数论-欧拉函数&欧拉降幂

"""
什么是互质: 互质指的是两个或多个整数的最大公因数是1。
欧拉函数f(n), 表示小于等于n中和n互质的数字个数。
1.若p为质数, 则f(p) = p - 1, 特殊的f(1) = 1
2.当p为质数, 则f(p**n) = p**n - p**(n-1)
3.欧拉函数是积性函数, 若gcd(a, b)=1, 则f(ab) = f(a) * f(b)
4.利用唯一分解定理分解n, 再求欧拉函数:
  n=P1**q1 * P2**q2 ... Pk**qk
  有: f(n) = n * [(P1-1)//P1] * [(P2-1)//P2] ... [(Pk-1)//Pk]
"""
# 直接利用素因子分解求解单个的欧拉函数
# 第一种: 时间复杂度O(n)
def euler_phi1(n):
  ans = n
  for i in range(2, n + 1):
    if n % i == 0:
      ans = ans * (i - 1) // i
      while n % i == 0:
        n //= i
  return ans

# 第二种(第一种的进一步优化): 时间复杂度O(n ** 0.5)
def euler_phi2(n):
  ans = n
  m = int(n ** 0.5)
  for i in range(2, m + 1):
    if n % i == 0:
      ans = ans * (i - 1) // i
      while n % i == 0:
        n //= i
  if n > 1:
    ans = ans * (n - 1) // n
  return ans

"""
欧拉定理: 当gcd(a, p)=1, 有a**(f(p)) ≡ 1(mod p)
上述定义中, 若p为质数, 则有a**(p-1) ≡ 1(mod p)
即: 费马小定理是欧拉定理的特殊情况
1.当gcd(a, p)=1时:
  a**b ≡ a**(b mod f(p)) (mod p)
2.当gcd(a, p)!=1时:
  1.当b<f(p)时:
    a**b ≡ a**b (mod p)
  2.当b>=f(p)时:
    a**b ≡ a**((b mod f(p)) + f(p)) (mod p)
当b较小时, 不用降幂, 当b超大时, 利用欧拉函数可以直接降幂
"""

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

武科菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值