扩展欧拉定理

似乎这也被叫做欧拉定理??
a b ≡ a b m o d    φ ( m ) + φ ( m ) ( m o d m ) , w h e r e   b > = φ ( m ) a^b \equiv a^{{b}\mod \varphi(m)+\varphi(m)}\pmod{m},where\ b>=\varphi(m) ababmodφ(m)+φ(m)(modm),where b>=φ(m)
证明:
a a a分解质因数,与 m m m互质的部分显然满足,考虑与 m m m不互质的一个质因子 p b p^b pb
g c d ( p r , m p r ) = 1 gcd(p^r,\frac m{p^r}) = 1 gcd(pr,prm)=1
那么如果 b > = r b>=r b>=r p b = p b − r ∗ p r ≡ p b − r p φ ( m ) + r ( m o d m ) p^b = p^{b-r}*p^r\equiv p^{b-r}p^{\varphi(m)+r}\pmod{m} pb=pbrprpbrpφ(m)+r(modm)
这个 p r ≡ p φ ( m ) + r ( m o d m ) p^r \equiv p^{\varphi(m)+r}\pmod m prpφ(m)+r(modm)
可以这样理解:
m = p r ∗ s , g c d ( s , p r ) = 1 m = p^r * s , gcd(s,p^r) = 1 m=prs,gcd(s,pr)=1
那么 p φ ( m ) + r ≡ 0 ( m o d p r ) , p φ ( m ) + r ≡ 1 ( m o d s ) p^{\varphi(m)+r}\equiv 0\pmod {p^r} , p^{\varphi(m)+r}\equiv 1\pmod s pφ(m)+r0(modpr),pφ(m)+r1(mods)
p r ≡ 0 ( m o d p r ) , p r ≡ 1 ( m o d s ) p^r\equiv 0\pmod {p^r} , p^r\equiv 1\pmod s pr0(modpr),pr1(mods)
那么你做CRT出来结果是一样的。
然后我们就得到了 p b ≡ p φ ( m ) + b ( m o d m ) , w h e r e   b > = r p^b\equiv p^{\varphi(m)+b}\pmod m,where\ b>=r pbpφ(m)+b(modm),where b>=r
发现后面那个限制条件不好用。
我们放弱一点: p b ≡ p φ ( m ) + b ( m o d m ) , w h e r e   b > = φ ( m ) p^b\equiv p^{\varphi(m)+b}\pmod m,where\ b>=\varphi(m) pbpφ(m)+b(modm),where b>=φ(m)
这放的好宽啊
这放一下就让这个公式好记得多。
p b ≡ p b m o d    φ ( m ) + φ ( m ) ( m o d m ) , w h e r e b > = φ ( m ) p^b\equiv p^{b\mod \varphi(m)+\varphi(m)}\pmod m,where b>= \varphi(m) pbpbmodφ(m)+φ(m)(modm),whereb>=φ(m)
然后和其他互质的因数组合一下就得证了。

模板

AC Code:

#include<bits/stdc++.h>
using namespace std;

int a,m;

int Pow(int base,int k,int mod){
	int ret = 1 % mod;
	for(;k;k>>=1,base=1ll*base*base%mod)
		if(k&1)
			ret=1ll*ret*base%mod;
	return ret;
}

int main(){
	scanf("%d%d",&a,&m);
	int phi = m;
	int M = m;
	for(int i=2;i*i<=M;i++)
		if(M % i == 0)
		{
			phi = phi / i * (i-1);
			while(M % i == 0) M /= i;
		}
	if(M > 1) phi = phi / M * (M-1);
	int b = 0;
	char ch;
	for(;!isdigit(ch=getchar()););
	bool f = 0;
	for(b=ch-'0';isdigit(ch=getchar());b=(b*10+ch-'0'),f|=b>=phi,b%=phi);
	printf("%d\n",Pow(a,b+f * phi,m));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值