2026a
# powermod
计算
函数库: TySymbolicMath
# 语法
powermod(x::Integer, p::Integer, m)
# 说明
c = powermod(a,b,m) 返回模幂 a^b mod m。 输入 a,b 必须是整数,并且 m 必须是非负整数。 示例
# 示例
计算模幂
使用 powermod 计算模幂 a^b mod m。 powermod 函数是高效的,因为它不计算指数 a^b。
using TySymbolicMath
c = powermod(3,5,7)
c = 5
证明费马小定理
费马小定理指出,如果 p 是素数且 a 不能被 p 整除,则 a^(p–1) mod p 是 1。
测试费马小定理 p = 5,a = 3。正如预期的那样,powermod 返回 1。
using TySymbolicMath
p = 5
a = 3
c = powermod(a,p-1,p)
c = 1
对所有 a 小于 p 的值测试相同的情况。 函数 powermod 以元素为单位返回一个向量。
p = 5
a = 1:p-1
c = powermod.(a,p-1,p)
4-element Vector{Int64}:
1
1
1
1
使用 Fermat Primality Test 计算 Fermat Primes
费马小定理指出,如果 p 是素数且 a 不能被 p 整除,则 a^(p–1) mod p 是 1。相反,如果 a^(p–1) mod p 是 1 而 a 不是 可被 p 整除,则 p 并不总是素数(p 可以是伪素数)。
使用以 2 为底的费马小定理,测试 300 到 400 之间的素数。
using TySymbolicMath
using TyMath
p = 300:400
remainder = powermod.(2,p.-1,p)
primesFermat = p[remainder .== 1]
priemsFermat = 17-element Vector{Int64}:
307
311
313
317
331
337
341
347
349
353
359
367
373
379
383
389
397
通过将结果与 isprime 进行比较,找到 Fermat 伪素数。 341 是费马伪素数。
primeNumbers = p[isprime.(p)]
setdiff(primesFermat,primeNumbers)
ans = 1-element Vector{Int64}:
341
# 输入参数
a - 基数数字 | 向量 | 矩阵| 数组 | 符号数 | 符号数组
基数,指定为数字、向量、矩阵、数组或符号数字或数组。 a 必须是整数。
b - 指数或幂数字 | 向量 | 矩阵| 数组 | 符号数 | 符号数组
指数或幂,指定为数字、向量、矩阵、数组或符号数字或数组。 b 必须是整数。
m - 除数数字 | 向量 | 矩阵| 数组 | 符号数 | 符号数组
除数,指定为数字、向量、矩阵、数组或符号数字或数组。 m 必须是非负整数。
# 详细信息
模幂运算
对于正指数 b,模幂 c 定义为
对于负指数 b,可以通过找到模 m 的模乘逆 d 来扩展定义,即
其中 d 满足关系