前言:體驗到了推式子的快感orz
題目大意:求$\varphi(n)*\varphi(m)*\sum_ \varphi(k)\ mod\ 998244353$
設$n=q_1k+r_1,m=q_2k+r_2$,那麼$q_1=\lfloor \frac \rfloor,q_2=\lfloor \frac \rfloor$。
$n+m=(q_1+q_2)k+r_1+r_2$
$(n+m)-(q_1+q_2)k=r_1+r_2$
$\lfloor \frac \rfloor-\lfloor \frac \rfloor-\lfloor \frac \rfloor=r_1+r_2=1$
所以現在變為:找到滿足上式的$k$。
我們先給出乙個式子:
$ans=\sum\limits_^\varphi(k)*\lfloor \frac \rfloor-\sum\limits_^n \varphi(k)*\lfloor \frac \rfloor-\sum\limits_^m \varphi(k)*\lfloor \frac \rfloor$
這個式子是什麼意思?
對於$(\lfloor \frac \rfloor-\lfloor \frac \rfloor-\lfloor \frac \rfloor)*\varphi(k)$:
如果$k$滿足條件,那麼係數為$1$,對答案有貢獻。如果$k$不合法那麼係數為$0$,對答案是沒有貢獻的。所以上面給出的式子可以計算所有合法的答案。
現在我們嘗試對$\sum\limits_^n \varphi(k)*\lfloor \frac \rfloor$進行化簡。
有這樣乙個關係:$\sum\limits_^n i=\sum\limits_^n \sum\limits_\varphi(k)=\sum\limits_^n \varphi(k)*\lfloor \frac \rfloor$
證明:$\sum\limits_^n i=\sum\limits_^n \sum\limits_\varphi(k)$
對於乙個數$i$,在小於等於它的數中有這樣的關係:
1.最大公約數為$1$,記為$g_1$,個數顯然是$\varphi(i)$
2.最大公約數為$2$,記為$g_2$,個數是$\varphi(i/2)$
$\cdots$
i.最大公約數為$i$,記為$g_i$,個數為$1$。
這些集合的並集大小為$i$,所以上述等式成立。
現在來看$\sum\limits_^n \sum\limits_\varphi(k)=\sum\limits_^n \varphi(k)*\lfloor \frac \rfloor$
對於左式,其意義為考慮每個$i$對答案的貢獻;而對於右式,其意義為考慮每個合法的$k$對答案的貢獻。二者對於答案的總貢獻是相同的,所以等式成立。
經過化簡,最終答案為$\varphi(n)*\varphi(m)*n*m$
**:
#include#define int long longusing
namespace
std;
const
int mod=998244353
;int
n,m,ans;
inline
int phi(int
x)
if (x>1) res=res/x*(x-1
);
return res%mod;
}signed main()
bzoj4173數學(尤拉函式)
倒數第二行的拓展 借用某群提問的乙個問題 對於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畫出後就是乙個...
BZOJ4173 數學 尤拉函式神題
輸入檔案的第一行輸入兩個正整數 如題5 6 240n,m 10 15 題解 step 1 這步還是很容易的吧 畢竟原來的式子不太舒服。但是注意,最後乙個式子的取值只能為0或1,所以就變成了。step 2 這步倒是難理解一些,但是考慮 我們將這三個等式都算出來,如果滿足了左邊那個條件,那麼這三個等式加...
bzoj4173(尤拉函式)
資料大 10 15次方 公式複雜 不知道怎麼化簡 然後,感覺滿足打表找規律,發現sigema phi k k屬於s n,m n m。再求兩個phi就好,注意在括號裡面mod之後,需要在括號外面再mod一次,否則會wa。標準證明 總結1 很多的問題,通過小範圍資料打表,是非常便於幫助分析題目的性質的,...