今天给大家分享快速幂的相关知识
1.快速幂的基本内容

2.快速幂的代码

3.费马小定理

4.逆元

问题描述
给出 n,p,求 n−1modp。其中,n−1modp 指存在某个整数0≤a<p,使得 namodp=1,此时称 a为 n 的逆元,即 a=n−1。数据保证 p 是质数且 nmodp≠0。
输入格式
输入包含一行,为两个整数 n,p。
输出格式
输出包括一行,为一个整数,表示n−1modp。
输入案例:
3 5
输出案例:
2
代码部分:
cpp
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
ll qmi(ll a,ll b,ll p){
ll res=1;
while(b){
if(b&1)res=res*a%p;
a=a*a%p;b>>=1;
}
return res;
}
ll inv(ll a,ll p){
return qmi(a,p-2,p);
}
int main()
{
ll n,p;cin>>n>>p;
cout<<inv(n,p)<<'\n';
return 0;
}
这是求解逆元的模版题,题目比较基础,大家可以记忆理解。
问题描述
费马是一位著名的数学家,为了解决某些复杂的数学问题,他经常需要计算模逆元。直接计算模逆元非常耗时,但费马发现了一个简单的方法来快速计算模逆元,这与他之前的一个数学发现有关。
模逆元:如果 p 是素数,并且 a是一个不被p 整除的整数,那么 a在模 p 下的逆元是 ap−2modp。这是因为根据费马小定理,我们有 ap−1≡1modp。所以,ap−2≡1modp,这意味着 ap−2是 a 在模 p 下的逆元。
现在给定两个正整数 a 和 p。计算 a 在模 p 下的逆元,并确保 p 是一个素数。
输入格式
输入包含两个正整数,分别为 a 和 p。
输出格式
输出 a 在模 p下的逆元。如果逆元不存在(即 a 能被 p 整除),输出 Inverse doesn't exist
。
输入案例:
cpp
3 7
输出案例:
cpp
5
代码部分:
cpp
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
ll qmi(ll a,ll b,ll p){
ll res=1;
while(b){
if(b&1)res=res*a%p;
a=a*a%p;b>>=1;
}
return res;
}
bool isprime(ll a){
if(a<2)return false;
for(ll i=2;i<a/i;i++){
if(a%i==0)return false;
}
return true;
}
int main()
{
ll a,p;cin>>a>>p;
if(a%p==0){
cout<<"Inverse doesn't exist"<<'\n';
return 0;
}
if(isprime(p)){
cout<<qmi(a,p-2,p)<<'\n';
}
return 0;
}
希望今天题目对大家能有所帮助,今天的分享就到这里,希望大家多多关注。