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 满足关系

# 另请参阅

mod | nextprime | nthprime | prevprime