關於尤拉函式

2021-10-04 18:56:49 字數 1880 閱讀 9534

原來是有一篇文的 但是latex渲染壓力夠大了不想加東西了 乾脆開個新坑

剛好之前xoi2003最後一題出了個被出爛的idea 算是提醒一下自己別再弄板子題了吧

說句閒話,碼農教程司馬

前置知識:

擴充套件尤拉定理: b≥φ

(p)時

,ab≡

abmo

dφ(p

)+φ(

p)(m

odp)

b\ge \varphi(p)時,a^b\equiv a^\pmod p

b≥φ(p)

時,ab

≡abm

odφ(

p)+φ

(p)(

modp

)(顯然 b

<φ(

p)

b<\varphi(p)

b<φ(

p)時無需變化)

題意:求 222

⋯mod

p\large 2^}}\bmod p

222⋯mo

dp的值就是板子,用擴充套件尤拉定理遞迴求解(也可轉化為遞推)即可

遞迴邊界就是 p=1

p=1p=

1 ,答案顯然為0

考慮這樣一件事:對於偶數 p

pp ,φ(p

)≤p2

\varphi(p)\le\dfrac p2

φ(p)≤2

p​成立(偶數全部被排除);對於奇數 p

pp ,考慮計算公式:

φ (x

)=x×

∏i=1

m(1−

1pi)

\varphi(x)=x\times\prod\limits_^m(1-\dfrac 1)

φ(x)=x

×i=1

∏m​(

1−pi

​1​)

( p1∼m

p_p1

∼m​ 為 x

xx 的質因子,x

xx 為奇數)

發現 1−1

pi=p

i−1p

i1-\dfrac 1=\dfrac

1−pi​1

​=pi

​pi​

−1​ ,於是易 證 φ(x

)\varphi(x)

φ(x)

必為偶數(讀者自證不難)

那麼我們就發現遞迴(遞推)求解層數是log級的,時間複雜度就不虛了

我用線性篩預處理了一下 φ

\varphi

φ ,感覺直接爆算可能不怎麼快

反正時間複雜度是 θ(p

+t

log⁡p)

\theta(p+t\log p)

θ(p+

tlogp)

,本題中 p=1

e7

p=1e7

p=1e7

寫**的時候突然意識到遞推並不好寫。。寫個遞迴算了 反正也不慢

qnmd線性篩

a掉之後翻了一下提交記錄 突然發現直接算尤拉函式速度會快很多

一方面是理論上運算次數少了 另一方面是沒有訪問陣列,常數也小了不少

所以還是放新**吧

#include

int t,s,a,cnt,p;

intphi

(int x)

x>1&&

(t=t/x*

(x-1))

;return t;

}inline

int_power

(int x,

int y,

int p)

intf

(int p)

intmain()

和上題很類似

坑回頭填

2016 12 7 關於尤拉函式

關於什麼是尤拉函式,以及一些非常簡單的尤拉函式,在此就不多加贅述。尤拉函式的基本性質 1.尤拉函式是積性函式,但不是完全積性函式,即 mn n m 只在 n,m 1時成立.2.對於乙個正整數n的素數冪分解n p1 q1 p2 q2 pn qn.則 n n 1 1 p1 1 1 p2 1 1 pn 3...

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...

尤拉函式 尤拉定理

尤拉函式 設 n 為正整數,則 1,2,n 中與 n 互素的整數的個數計作 n 叫做尤拉函式。設 p 是素數,p p 1設 p 是素數,pa pa p a 1 設 p,q 是不同的素數,n q p,n p q 即 n p 1 q 1 設 m,n 是兩個正整數,且 m,n 1,若 n m n,n m ...