似乎这也被叫做欧拉定理??
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)
ab≡abmodφ(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=pb−r∗pr≡pb−rpφ(m)+r(modm)
这个
p
r
≡
p
φ
(
m
)
+
r
(
m
o
d
m
)
p^r \equiv p^{\varphi(m)+r}\pmod m
pr≡pφ(m)+r(modm)
可以这样理解:
m
=
p
r
∗
s
,
g
c
d
(
s
,
p
r
)
=
1
m = p^r * s , gcd(s,p^r) = 1
m=pr∗s,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)+r≡0(modpr),pφ(m)+r≡1(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
pr≡0(modpr),pr≡1(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
pb≡pφ(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)
pb≡pφ(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)
pb≡pbmodφ(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));
}