在數論,對正整數n,尤拉函式是1~n的數中與n互質的數的數目,我們記為φ(n
)φ(n)
φ(n)
,(後面尤拉定理中會用到)。此函式以其首名研究者尤拉命名。例如φ(8
)=4φ(8)=4
φ(8)=4
,因為1,3,5,7均和8互質。
φ (n
)φ(n)
φ(n)
求解公式:
現假設n
nn有r
rr個質因子p1、p2、p3、、、pr,則:
尤拉函式的兩個性質:來自尤拉函式及其證明(這兩個性質可以推出上面的公式)
1、單獨求某個尤拉函式值**:o(n
)o(\sqrt)
o(n
)
intfn(
int x)}if
(x>1)
ans-
=ans/x;
return ans;
}
2、埃氏篩、尤拉篩
⟹
\implies
⟹質數打表———埃氏篩&&尤拉篩
2.1 求1~n的尤拉函式值:o(n
logl
ogn)
o(nloglogn)
o(nlog
logn
)//埃氏篩法中每個合數會被它的每個質因子篩一遍,就完美地求出尤拉函式值了
bool vis[manx]
;void
make_prime
(int n)}}
}
2.2 求1~n的尤拉函式值:o(n
)o(n)
o(n)
原理:以下證明來自尤拉線性篩(篩質數,求尤拉函式)pp:
性質1:φ(p
)=p−
1φ( p)=p-1
φ(p)=p
−1;因為p為質數,而從1到p
pp,只有p
pp與p
pp自本身不互質,其餘的(p−
1)(p-1)
(p−1
)個數字都與p
pp互質,因此得出性質1;
性質2:對於i
ii%p==
0,φ(
i∗p)
=p∗φ
(i)p==0 , φ(i * p)=p * φ(i)
p==0,φ
(i∗p
)=p∗
φ(i)
;性質3:對於i
ii%p!=
0p ! = 0
p!=0
, φ (i
∗p)=
φ(i)
∗(p−
1);φ (i * p) = φ(i) * (p-1);
φ(i∗p)
=φ(i
)∗(p
−1);
利用了尤拉函式的積性。而又通過性質1可知,p−1
=φ(p
)p-1=φ( p)
p−1=φ(
p),因此φ(i
∗p)=
φ(i)
(p−1
)=φ(
i)∗φ
(p)φ(i*p)=φ(i)(p-1)=φ(i)*φ ( p)
φ(i∗p)
=φ(i
)(p−
1)=φ
(i)∗
φ(p)
;這個,本人才疏學淺,看了各種證明,但還是不明白性質2,性質3是怎麼得出來的,所以先當作結論記住吧。
知道了這三個結論之後,在配合尤拉篩篩質數,就可以得出範圍內所有的數字的尤拉函式。
2020.7.19對性質2的理解:對於i%p
==0i\%p==0
i%p==0
(即p也是i的因子),與i互質的數肯定與 i*p互質。比如i=35,p=5時,與i互質的數有1,2,3,4,6…那麼這些數肯定也與35 *5互質,而且將這些數分別加上35(或35 *2,35 *3,35 *4)後可以發現它們還是與35 *5互質,所以與35 *5的數的個數為φ(35) *5
**:
void
make_prime
(int n)
for(
int j=
0; j
)else
ans[i*prime[j]
]=ans[i]
*ans[prime[j]];
//改動部分3(對應性質3)
//或者寫成ans[i*prime[j]]=ans[i]*(prime[j]-1);}}
}
例題:farey sequence
感想:質因子是個神奇的存在
尤拉公式求函式值
問題描述 利用尤拉公式,求解y 1 1 x2 2y2,當y 0 0,h 0.5時,其在0 x 4時的結點值,精確到小數點後四位。問題分析 尤拉公式推導 當dy dx f x,y 且y x0 y0時,可推導出切線方程的遞推公式,即 yi 1 yi f xi,yi xi 1 xi 和xi x0 ih 且...
尤拉函式及其快速打表
下面的大部分都是借鑑這位大佬的,加了點自己的理解。我就比較懶,直接貼 了。講解都在注釋中 尤拉函式的作用 用於求小於n的與n互質數的個數 尤拉函式的公式 n n 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為n的所有質因數,n是不為0的整數。1 1 唯一...
求尤拉函式
3.尤拉函式 對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目 顯然對素數n,phi n n 1 通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1互質的數就是1本身 很簡單,就不寫 ...