bzoj4173數學(尤拉函式)

2022-07-20 03:57:14 字數 1581 閱讀 7647

倒數第二行的拓展(借用某群提問的乙個問題):

對於d*phi(d),當d為k時,在左式,他出現在 i 為k,2k,3k...(n/k)*k  共出現n/k次,在右式,他出現在 n/i 為n/1,n/2...n/(n/k) 共出現n/k次,畫個**,每行就是每個 i 對應1,2,3...floor(n/i),i 從1~n畫出後就是乙個逐漸縮減的三角形,每列對應乙個d的值,每個d出現在 i 為floor(5/i)>=3的地方,終止在floor(5/i)=3的地方,所以每個d出現次數是 floor(n/i)

而左式在圖中的體現是把每個縱列d的每個安放位置調整一下,例如②,第乙個2在i==1,第二個2調整到i==4,總出現次數不變(即看n中有幾個大小為2的塊

)這裡d用兩種不同的方式出現在這些個 i 中,分析第一種有n/k個值能d|i 時,第二種就是把這個方式解釋一下

~~~而等號右邊換成

同樣成立,證明更簡單了,就是引數為k時出現n/k次!!!

第乙個等式用莫比烏斯反演列出f(1),f(2)...f(n)那些個等式,就很容易發現f(n)=n

小總結:模『%』  整除『|』 這些抽象符號盡量化簡成+-*/ 的形式!!!

ac**:

#include#define per(i,a,b) for(int i=a;i<=b;i++)

#define mod 998244353//

注意mod最好define,不要定義型別,否則需要ll的時候會錯,不過呢,ll的時候int也會變成ll把

using

namespace

std;

typedef

long

long

ll;const

int inf =0x3f3f3f3f

;const

double eps=1e-8;//

#define siz 1000005

ll read()

while(ch>'

1'&&ch

return res*f;

}ll n,m;

ll phi(ll n)

//n除完素因子後為1

} }

if(n!=1)

return

re;}

intmain()

bzoj4173(尤拉函式)

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

BZOJ4173 數學 尤拉函式神題

輸入檔案的第一行輸入兩個正整數 如題5 6 240n,m 10 15 題解 step 1 這步還是很容易的吧 畢竟原來的式子不太舒服。但是注意,最後乙個式子的取值只能為0或1,所以就變成了。step 2 這步倒是難理解一些,但是考慮 我們將這三個等式都算出來,如果滿足了左邊那個條件,那麼這三個等式加...

4173 數學 尤拉函式 思路題

由於我太弱。所以看題解的時候有很多地方想了一會兒才明白。其實重點就是限定條件n k m k k化簡到這個式子 n m k n k m k 1的理解。首先化到 n m k n k m k 1是容易的,只要將取模換成整除然後同時除以k,如果沒有下取整,即n m k n k m k是顯然為0的,而如果帶上...