BZOJ 4802 尤拉函式

2022-05-19 21:12:29 字數 1499 閱讀 7299

已知n,求phi(n)

正整數n。n<=10^18

輸出phi(n)84

很明顯,這樣的題就是一道十分簡單的入門題。只是n比較大,但輸入和輸出都還沒有爆long long。如果輸入高精度數,那

就很噁心了(雖然可以定義大整數類big int)。

phi[n]=n∏(1-(1/p)),所以是miller-rabin和pollard-rho演算法,用來分解乙個大數的質因子。

當n較小的時候,若要算出所有的phi(i),那麼尤拉篩明顯是最優的,線性空間線性時間。

若只需算出固定n對應的字首和∑phi(i),那很明顯,不必算出所有的phi(i)。

對於這種字首和∑f(i)的計算,若使用杜教「篩」(這並不是素數篩),需要構造乙個h=f*g(*指狄利克雷卷積),且字首和

∑g(i)與字首和∑h(i)可以十分方便地算出。然後經過一系列較為方便的演算,做到大事化小遞迴求解。如果預先打表o(n^(2/3)),此時複雜度最優為o(n^(2/3))。

我們可以發現,杜教篩對f的要求很苛刻。但是,洲閣篩使用了完全不同的思路。只要f(i)是多項式的,那麼我們可以想到類似dp的方法。這樣原始是o(n^(3/2))即o(n*sqrt(n))的,但通過各種優化可以壓至o(n^(3/4)/log n)的級別。

最後,說一下此題的方法。

摘自:遺憾的是,存在carmichael數:你無論取多少個a,有乙個不滿足,算我輸。

比如:561 = 11*51就是乙個carmichael數。

那麼,額。。所以我們需要改進演算法。

首先有:如果p是素數,x是小於p的正整數,且x^2 mod p = 1,那麼要麼x=1,要麼x=p-1

(這個廢話,x=p-1模意義下等於x=-1)

然後我們可以展示下341滿足2^340 mod 341 = 1,卻不是素數(341=31*11)的原因:

2^340 mod 341 = 1

2^170 mod 341 = 1

2^85 mod 341 = 32

(32這個數很那啥啊怎麼不等於340也不等於1啊。。這明顯有內幕嘛32*32=1024,1024=341*3+1)

那麼就能說明這個數不是素數。

如果是素數,一定是從p-1變到1,或是把所有2的次冪去除完,本來就等於1(這樣平方完就一直是1了)

所以要麼把所有2的次冪去除完,本來就等於1,要麼存在某乙個次冪=p-1(這樣就正常多了)

這就是miller-rabin素數驗證的二次探測。

應該來說miller-rabin演算法也是挺好寫的

其中mul(a,b,c)表示a*b%c(因為a*b會爆longlong,所以用快速加)

如果現在拆分的是n:pollard-rho(n)

主要流程:miller-rabin判斷是否質數,是返回,否就試圖找出其中乙個因子d,然後遞迴做pollard-rho(d)和pollard-rho(n/d)。

bzoj4173(尤拉函式)

資料大 10 15次方 公式複雜 不知道怎麼化簡 然後,感覺滿足打表找規律,發現sigema phi k k屬於s n,m n m。再求兩個phi就好,注意在括號裡面mod之後,需要在括號外面再mod一次,否則會wa。標準證明 總結1 很多的問題,通過小範圍資料打表,是非常便於幫助分析題目的性質的,...

bzoj 2818 尤拉函式

思路 就是對於某個數q,跟他互質的數p,kp和kq的最大公約數是k,那麼這個數能組成的答案的數量就是phi i 乘以某個質數,且乘積小於n 基於這種思路寫下這個 include include include include include include include include inclu...

尤拉函式 尤拉定理

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