【數論數學】擴展歐拉定理


本文感謝@burnside神仙和@ddosvoid神仙的幫助審稿qwq

Definition

\(\forall~a~,~m~\in~Z^+~,~s.t.~\gcd(a,m)=1\),則一定滿足\(~a^{\phi(m)}~\equiv~1~(Mod~m)~\)。該定理被稱作歐拉定理。

Demonstration

\(x_i\)為第\(i\)個與\(m\)互質的數,則共有\(\phi(m)\)\(x_i\)

\(p_i~=~a~\times~x_i\)

引理一:

\(\{p_i\}\)間兩兩模\(m\)不同余,\(\{x_i\}\)間兩兩模\(m\)不同余。

證明:

先證\(\{x_i\}\)間兩兩模\(m\)不同余:

因為\(~\forall~i~\in~[1,\phi(m)]~,~x_i~<~m~\),故

\[~x_i~Mod~m~\equiv~x_i~ \]

\(~\forall~i,j~\in~[1,\phi(m)],i~\neq~j~\)都有\(~x_i~\neq~x_j~\)。於是

\[~x_i~Mod~m~\neq~x_j~Mod~m~ \]

\(\{x_i\}\)間兩兩模\(m\)不同余

再證\(\{p_i\}\)間兩兩模\(m\)不同余:

反證法,若存在一對\(~i,j~\in~[1,\phi(m)]~,~i~\neq~j~,~s.t.~p_i~\equiv~p_j~(Mod~m)~\),則

\[a~\times~x_i~\equiv~a~\times~x_j~(Mod~m) \]

\[\Rightarrow~x_i~\equiv~x_j~(Mod~m)$$。 根據$\{x_i\}$間兩兩模$m$不同余,產生矛盾,於是$\{p_i\}$間兩兩模$m$不同余 ##### 證畢 ### 引理二: $\forall~i~\in~[1,\phi(m)]~,~p_i~$與$m$互質。 ##### 證明: 寫出$m,a,x_i,p_i$的唯一分解式: $$m~=~q_1^{c_1}~q_2^{c_2}~\dots~q_k^{c_k}\]

\[a=q_1^{d_1}~q_2^{d_2}~\dots~q_k^{d_k} \]

\[x_i~=~q_1^{e_1}~q_2^{e_2}~\dots~q_k^{e_k} \]

\[p_i~=~q_1^{e_1+d_1}~q_2^{e_2+d_2}~\dots~q_k^{e_k+d_k} \]

\(\forall~i~,~s.t.~c_i~\neq~0~\)都有\(d_i~=~e_i~=~0\),於是\(d_i+e_i~=~0\)

於是\(\forall~i~\in~[1,\phi(m)]~,~p_i~\)\(m\)互質。

證畢

根據上述引理,可得所有\(p_i\)的模\(m\)的解的集合與\(\{x_i\}\)相等,於是他們的積模\(m\)的值也相等。

於是有

\[\prod_{i=1}^{\phi(m)}~p_i~\equiv~a^{\phi(m)}~\prod_{i=1}^{\phi(m)}~x_i~\equiv~\prod_{i=1}^{\phi(m)}~x_i~(Mod~m) \]

於是有\(a^{\phi(m)}~\equiv~1~(Mod~m)\)。證畢。

Extension

對於\(a\)\(m\)不一定互質的情況,有:

\(a^c~\equiv~\begin{cases}a^{c~Mod~\phi(m)} &\gcd(a,m)~=~1 \\a^c &\gcd(a,m)~\neq~1~\land~c~<~\phi(m) \\ a^{c~Mod~\phi(m)~+~\phi(m)} &\gcd(a,m)~\neq~1~\land~c~\geq~\phi(m)\end{cases}\)

Demonstration

\(m~=~1\)時顯然成立,以下討論\(m~\neq~1\)的情況。

對於\(\gcd(a,m)~=~1~\)的情況,因為\(a^{\phi(m)}~\equiv~1\),所以每\(\phi(m)\)\(a\)就相當於乘\(1\)。於是只需要算\(c~Mod~\phi(m)\)次。

對於\(c~<~\phi(m)\)的情況,直接爆算

下面證明第三種情況。

先證明\(a\)是一個質數的情況:

引理1:

\(\forall~p~\)為質數,\(r~\in~Z^+\),都有\(\phi(p^r)~=~(p-1)~\times~p^{r-1}\)

證明:

由於\(p\)是一個質數,所以\(~1~\sim~(p^r-1)~\)中有且僅有\(i~\times~p,~i~\in~(0,p^{r-1})~\)\(p^r\)不互質。

於是\(\phi(p^r)~=~p^r~-~p^{r-1}~=~p^{r-1}~\times~(p~-~1)~\)

證畢。

引理2:

\(\forall~k~\in~Z\)\(\exists~a,b,x,y~\in~Z^+~,~s.t.~x^a~\times~y^b~=~k\),都有\(~a,b~\leq~\phi(k)~\)

證明:

先考慮\(k\)為一個質數\(p\)\(r\)次冪的情況。根據引理1有:

\(\phi(k)~=~\phi(p^r)~=~(p-1)~\times~p^{r-1}\)

下面說明\((p-1)~\times~p^{r-1}~\geq~r\)

\(p=2\)時:

經驗證\(~r=1,2,3~\)時成立。當\(~r>3~\)時按照\(r\)的大小做數學歸納,可證正確性。

\(~p~>~2~\)時,不等號左側增大,右側不變,不等式仍然成立。

考慮\(k\)是多個質數冪時的情況,按照質數個數做數學歸納,正確性成立。

任意組合質數,引理得證。

證畢
引理3:\(\exists~r~\leq~c~,~s.t.~a^{\phi(m)+r}~\equiv~a^r~(Mod~m)\)
證明:

\(m~=~t~\times~a^r\),其中\(\gcd(t,a)=1\)\(t\)的存在性顯然。

因為\(\gcd(t,a)~=~1\),且\(\phi\)函數是一個積性函數,所以\(\phi(t)~|~\phi(m)\)

根據歐拉定理,\(a^{\phi(t)}~\equiv~1~(Mod~t)\),於是有

\[a^{\phi(m)}~\equiv~1~(Mod~t) \]

同余式同乘\(a^r\),於是有

\[a^{\phi(m)+r}~\equiv~a^r~(Mod~m) \]

已經證明可以構造出這樣的\(r\)。根據引理2,\(r~\leq~\phi(m)\)。又\(c~\geq~\phi(m)\),於是可證構造出的\(r~\leq~c\)。定理得證。

證畢

於是

\[a^c~\equiv~a^{c-r+r}~\equiv~a^{c-r+\phi(m)+r}~\equiv~a^{c+\phi(m)}~(Mod~m) \]

對上式做數學歸納,可得\(a^c~\equiv~a^{c+k\phi(m)}~,~k~\in~Z\),需保證指數為正。

於是最小的合法的指數即為\(c~Mod~\phi(m)~+~\phi(m)\)

於是有$$a^c~\equiv~a^{c~Mod~\phi(m)~+~\phi(m)}$$

\(a\)是一個質數的冪次時,設\(a=p^k\),則

\[a^c~\equiv~p^{ck}~\equiv~p^{ck+\phi(m)}~\equiv~p^{ck+k\phi(m)}~\equiv~(p^k)^{c+\phi(m)}~\equiv~(p^k)^{c~Mod~\phi(m)~+~\phi(m)}~~(Mod~m) \]

\(a\)時多個質數次冪的乘積時,依據唯一分解定理做數學歸納,即證正確性。證畢。

Example

傳送門

Description

你有一個本子,你要往上面寫全部的長度為\(n\)\(b\)進制數字,每一頁可以寫\(c\)個。要求所有數字必須嚴格不含前導\(0\)。求最后一頁上有多少個數字

Input

三個數,依次是進制數\(b\),數字長度\(n\),每一頁的個數\(c\)

Output

一行一個整數代表答案

Hint

\(Forall:\)

\(2~\leq~b~<~10^{10^6}~,~1~\leq~n~<~10^{10^6}~,~1~\leq~c~\leq~10^9\)

Solution

考慮計數原理,第一個位置可以填\(~1~\sim~(b-1)~\)\(~(b-1)~\)個數字,剩下的位置可以填\(~0~\sim~(~b~-~1~)~\)\(~b~\)個數字。於是答案即為\(~(b-1)~\times~b^{(n-1)}\)。后面的應用擴展歐拉定理即可解決。

Code

#include<cstdio>
#include<cstring>
#define rg register
#define ci const int
#define cl const long long

typedef long long int ll;

template <typename T>
inline void qr(T &x) {
	rg char ch=getchar(),lst=' ';
	while((ch > '9') || (ch < '0')) lst=ch,ch=getchar();
	while((ch >= '0') && (ch <= '9')) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	if(lst == '-') x=-x;
}

namespace IO {
	char buf[120];
}

template <typename T>
inline void qw(T x,const char aft,const bool pt) {
	if(x < 0) {x=-x,putchar('-');}
	rg int top=0;
	do {IO::buf[++top]=x%10+'0';} while(x/=10);
	while(top) putchar(IO::buf[top--]);
	if(pt) putchar(aft);
}

const int maxn = 1000010;

char B[maxn],N[maxn];
ll m,phi,b;

int ReadMod(char*,cl&);
int GetPhi(ll);
void MinuN();
int mpow(int,ll);
bool judge();

int main() {
	freopen("1.in","r",stdin);
	scanf("%s %s",B+1,N+1);qr(m);
	b=ReadMod(B,m);
	if(judge()) return 0;
	int k=GetPhi(m);
	MinuN();
	int n=ReadMod(N,k)+k;
	int ans=1ll*(b-1)*mpow(b,n)%m;
	ans=(ans+m)%m;
	qw(ans?ans:m,'\n',true);
	return 0;
}

int ReadMod(char *str,cl & p) {
	int l=strlen(str+1);
	ll _ret=0;
	for(rg int i=1;i<=l;++i) _ret=((_ret<<1)+(_ret<<3)+(str[i]^48))%p;
	return _ret;
}

int GetPhi(ll x) {
	ll _ret=x;
	for(ll i=2;i*i<=x;++i) if(!(x%i)) {
		_ret=_ret*(i-1)/i;
		while(!(x%i)) x/=i;
	}
	if(x != 1) _ret=_ret*(x-1)/x;
	return _ret;
}

void MinuN() {
	int l=strlen(N+1);
	--N[l];
	for(rg int i=l;i;--i) if(N[i] < '1') {
		N[i]+=10,--N[i-1];
	} else break;
	if(N[1] == '0'+10) N[1]='0';
}

int mpow(int x,ll k) {
	int _ret=1,_temp=x;
	while(k) {
		if(k&1) _ret=1ll*_ret*_temp%m;
		_temp=1ll*_temp*_temp%m;
		k>>=1;
	}
	return _ret%m;
}

bool judge() {
	int l=strlen(N+1);
	if(l >= 17) return false;
	ll _tp=0;
	for(rg int i=1;i<=l;++i) _tp=(_tp<<1)+(_tp<<3)+(N[i]^48);
	int ans=1ll*(b-1)*mpow(b,_tp-1)%m;
	ans=(ans+m)%m;
	qw(ans?ans:m,'\n',true);
	return true;
}

Summary

擴展歐拉定理可以用在底數與模數不互質的情況下,將質數將至與模數同階的大小,從而可以使用快速冪進行運算。

注:本篇內容部分證明參考該BAJim_H的博客,在此表示衷心的感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM