费马小定理以及快速幂应用

定理

假设p为质数,a不是p的倍数,则有
a p − 1 ≡ 1 ( m o d   p ) a^{p-1}\equiv 1(mod \space p) ap11(mod p)

例子


2 100 关 于 13 的 余 数 2^{100}关于13的余数 210013
2 100 = 2 12 × 8 ⋅ 2 4 = 16 ( m o d   13 ) = 3 ( m o d   13 ) 2^{100}=2^{12 \times 8} \cdot2^4=16 (mod \space 13)=3 (mod \space 13) 2100=212×824=16(mod 13)=

### 费马小定理快速幂求解乘法逆元中的应用 费马小定理是数论中的一个重要定理,其描述为:如果 $ p $ 是一个质数,且 $ b $ 不是 $ p $ 的倍数,则有: $$ b^{p-1} \equiv 1 \ (\text{mod} \ p) $$ 基于这一结论,可以推导出 $ b $ 的乘法逆元。具体来说,乘法逆元的定义是:若 $ b \cdot x \equiv 1 \ (\text{mod} \ p) $,则 $ x $ 是 $ b $ 在模 $ p $ 意义下的乘法逆元。根据费马小定理,可以进一步得出: $$ b \cdot b^{p-2} \equiv 1 \ (\text{mod} \ p) $$ 因此,$ b^{p-2} \ \text{mod} \ p $ 就是 $ b $ 的乘法逆元。 在实际计算中,为了高效求解 $ b^{p-2} \ \text{mod} \ p $,通常采用快速幂算法。快速幂通过将指数分解为二进制形式,并利用模运算的性质,将幂次运算的时间复杂度从 $ O(n) $ 降低到 $ O(\log n) $。这种方法特别适合处理大数幂运算,例如在模数 $ p $ 较大的情况下。 以下是一个使用快速幂算法求解乘法逆元的示例代码: ```cpp #include <iostream> using namespace std; // 快速幂算法(取模):a^b % p long long pow_mod(long long a, long long b, long long p) { long long result = 1; a %= p; while (b) { if (b & 1) // 如果b是奇数 result = (result * a) % p; a = (a * a) % p; // 平方 b >>= 1; // 将b右移一位 } return result; } // 求a在模p下的乘法逆元(费马小定理,p必须为质数) long long inv(long long a, long long p) { return pow_mod(a, p - 2, p); } int main() { long long a, p; cout << "请输入a和p的值(p必须为质数):" << endl; cin >> a >> p; cout << a << "在模" << p << "下的乘法逆元是:" << inv(a, p) << endl; return 0; } ``` #### 代码说明 - `pow_mod` 函数实现了快速幂算法,用于计算 $ a^b \ \text{mod} \ p $。 - `inv` 函数调用 `pow_mod`,传入参数 $ a $、$ p-2 $ 和 $ p $,以计算 $ a^{p-2} \ \text{mod} \ p $,即 $ a $ 在模 $ p $ 意义下的乘法逆元。 - 在 `main` 函数中,用户输入 $ a $ 和 $ p $ 的值,程序输出对应的乘法逆元。 #### 适用条件 - 使用费马小定理的前提是模数 $ p $ 必须为质数。 - $ a $ 不能是 $ p $ 的倍数,否则无法满足 $ \text{gcd}(a, p) = 1 $,从而无法保证乘法逆元的存在。 通过快速幂算法,可以在 $ O(\log p) $ 的时间复杂度内高效地求解乘法逆元,这在实际应用中具有重要意义,尤其是在密码学和大数运算等领域。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

艾醒(AiXing-w)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值