1.同餘定理
定義1 :一般地,兩個整數a和b,除以大於1的自然數m所得的餘數相同,就稱a、b對於模m同餘,m在數學上被稱謂爲模(module)。記作:
a≡b(mod m)
讀作:a、b對於模m同餘。
即:如果a與b除以m的餘數相同,那麼a與b的關係就是模m同餘關係。
同餘的其它定義形式
定義1:若m|(a-b),則稱a與b對模m同餘。
定義2:若a=mq+b,q∈Z,則稱a與b對模m同餘。
顯然,a≡0(mod m)等價於m|a
以上三種定義形式均爲餘數的定義,雖然表現形式不同,但實質是一致的。
例如:當a=8,b=5,m=3時,8和5除以3得到的餘數相等(均爲2),就可寫爲
8≡5(mod3) 或 3|(8-5) 或 8=3q+5
根據同餘定理,可得到同餘的基本性質。
1.整除性
(即是說a和b之差是m的倍數)
換句話說,
同餘可以用來檢驗一個數是否可以整除另外一個數。
2.傳遞性
3.保持基本運算
這性質更可進一步引申成爲:
但是不能推論 ) ,(
4.放大縮小模數
爲正整數,,當且僅當
除法原理一
若且互質,則
基本概念:在數論中,對正整數n,歐拉函數是小於n的正整數中與n互質的數的數目。
如:例如,因爲1,3,5,7均和8互質; ...
完全餘數集合:
定義小於 n 且和 n 互質的數構成的集合爲 Zn ,稱呼這個集合爲 n 的完全餘數集合。 顯然 |Zn| =φ(n) 。
性質:
1.對於質數 p ,φ(p) = p -1 。
2.對於兩個不同質數 p, q ,它們的乘積 n = p * q 滿足 φ(n) = (p -1) * (q -1) 。
這是因爲
Zn = {1, 2, 3, ... , n - 1} - {p, 2p, ... , (q - 1) * p} - {q, 2q, ... , (p - 1) * q} , 則 φ(n) = (n - 1) - (q - 1) - (p - 1) = (p -1) * (q -1) =φ(p)
* φ(q) 。
歐拉定理
:
對於互質的正整數 a 和 n ,有 aφ(n)
≡ 1 mod n
歐拉公式:
( 1 ) pk 的歐拉函數
對於給定的一個素數 p , φ(p) = p -1。則對於正整數 n = pk ,
φ(n) = pk - pk -1 證明: 小於 pk 的正整數個數爲 pk - 1個,其中 和 pk 不互質的正整數有{p * 1,p * 2,...,p * (pk - 1-1)} 共計 pk - 1 - 1 個 所以 φ(n) = pk - 1 - (pk - 1 - 1) = pk - pk - 1 。
( 2 ) p * q 的歐拉函數
假設 p, q是兩個互質的正整數,則 p * q 的歐拉函數爲
φ(p * q) = φ(p) * φ(q), gcd(p, q) = 1 。
證明:
令 n = p * q , gcd(p,q) = 1
根據中國餘數定理,有
Zn 和 Zp × Zq 之間存在一一映射
(我的想法是: a ∈ Zp , b ∈ Zq ⇔ b * p + a * q ∈ Zn 。)
所以 n 的完全餘數集合的元素個數等於集合 Zp × Zq 的元素個數。
而後者的元素個數爲 φ(p) * φ(q) ,所以有
φ(p * q) = φ(p) * φ(q) 。
3.
任意一個整數 n 都可以表示爲其素因子的乘積爲:
I n = ∏ piki (I 爲 n 的素因子的個數) i=1
根據前面兩個結論,很容易得出它的歐拉函數爲:
I I Φ(n) = ∏ piki -1(pi -1) = n ∏ (1 - 1 / pi) i=1 i=1
對於任意 n > 2,2 | Φ(n) ,因爲必存在 pi -1 是偶數
歐拉函數模板:
#include<cstdio>
#include<cmath>
int Eular(int n)
{
int ans=1;
for (int i=2;i<=sqrt((double)n);i++)
{
if (n%i==0)
{
n/=i;
ans*=(i-1);
//若n有個因子是i的k次,根據歐拉公式有下面的代碼
while (n%i==0)
{
n/=i;
ans*=i;
}
}
}
if (n>1) //若最後剩的數爲大於1的素數,根據歐拉公式再算進去
ans*=(n-1);
return ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
printf("%d\n",Eular(n));
}
return 0;
}