扩展欧几里得算法
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
else
{
ll res=exgcd(b,a%b,y,x);
y-=x*(a/b);
return res;
}
}
快速幂
ll mod_pow(ll x,ll n,ll mod)
{
if(n==0)return 1;
ll res=mod_pow(x*x%mod,n/2,mod);
if(n&1)res=res*x%mod;
return res;
}
逆元
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
else
{
ll res=exgcd(b,a%b,y,x);
y-=x*(a/b);
return res;
}
}
ll inv(ll a,ll n)
{
ll x,y;
exgcd(a,n,x,y);
return (x%n+n)%n;
}
中国剩余定理
#include<iostream>
typedef long long ll;
using namespace std;
ll yu[120],chu[120];
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
else
{
ll res=exgcd(b,a%b,y,x);
y-=x*(a/b);
return res;
}
}
ll china(int l)
{
ll d,x,y,m,n=1,ret=0;
for(int i=0;i<l;i++)
n*=chu[i];
for(int i=0;i<l;i++)
{
m=n/chu[i];
d=exgcd(chu[i],m,x,y);
ret=(ret+y*m*yu[i])%n;
}
return (n+ret%n)%n;
}
int main()
{
int N;
cin>>N;
for(int i=0;i<N;i++)
cin>>chu[i]>>yu[i];
cout<<china(N)<<endl;
return 0;
}
敬请期待,后续内容将持续更新......
本文深入讲解了数论中几种核心算法:扩展欧几里得算法、快速幂算法、逆元算法及中国剩余定理的应用。扩展欧几里得算法用于求最大公约数及贝祖恒等式的系数;快速幂算法实现高效幂运算;逆元算法解决模意义下的除法问题;中国剩余定理则提供了解决同余方程组的有效途径。
6844

被折叠的 条评论
为什么被折叠?



