P4240 毒瘤之神的考驗

2022-09-12 13:30:19 字數 2805 閱讀 3358

求:

\[\sum_^\sum_^\varphi(ij)

\]先要考慮怎麼把 \(\varphi\) 轉成帶有 \(\gcd\) 或 \(\operatorname\) 的形式。

性質:\(\varphi(ij)=\frac\)。

證明:\[\begin

\varphi(i)\varphi(j)&=i\prod_\fracj\prod_\frac &p\in primes\\

&=ij\prod_\frac\prod_\frac

\end

\]所以有:

\[\begin

\varphi(i)\varphi(j)\gcd(i,j)&=ij\prod_\frac\gcd(i,j)\prod_\frac\\

&=\varphi(ij)\varphi(\gcd(i,j))

\end

\]化簡式子,有:

\[\begin

&\sum_^\sum_^\varphi(ij)\\

&=\sum_^\sum_^\frac\\

&=\sum_^\frac\sum_^\sum_^\varphi(i)\varphi(j)[gcd(i,j)=d]\\

&=\sum_^\frac\sum_^\rfloor}\sum_^\rfloor}\varphi(id)\varphi(jd)[gcd(i,j)=1]\\

&= \sum_^\frac\sum_^\rfloor}\mu(p)\sum_^\rfloor}\varphi(id)[p|i]\sum_^\rfloor}\varphi(jd)[p|j]\\

&=\sum_^\frac\sum_^\rfloor}\mu(p)\sum_^\rfloor}\varphi(ikd)\sum_^\rfloor}\varphi(jkd)\\

&=\sum_^\left(\sum_\frac\mu(\frac)\right)\left(\sum_^\rfloor}\varphi(it)\right)\left(\sum_^\rfloor}\varphi(jt)\right)& 設 \ t=dp \\

\end\\

\]設 \(f(n)=\sum\limits_\frac\mu(\frac)\),線性篩預處理即可,\(\mathcal(n \ln n)\)。

設 \(g(k,n)=\sum\limits_^\varphi(i,k)\),顯然 \(g(k,n)=g(k,n-1)+\varphi(nk)\)。

則原式等於:

\[\begin

\sum_^f(t)\times g(t,\lfloor\frac\rfloor)\times g(t,\lfloor\frac\rfloor)

\end

\]發現整除分塊不了,考慮把整個式子設出來:

\[h(a,b,n)=\sum_^f(t)\times g(t,a) \times g(t,b)

\]容易發現,這其實就是乙個差分:

\[h(a,b,n)=\sum_\rfloor=\lfloor\frac\rfloor \operatorname \lfloor\frac\rfloor=\lfloor\frac\rfloor}h(\lfloor\frac\rfloor,\lfloor\frac\rfloor,r)-h(\lfloor\frac\rfloor,\lfloor\frac\rfloor,l)

\]再考慮根號分治,我們設乙個閾值 \(s\),將所有 \(h(1,1,1) \sim h(s,s,n)\) 的 \(h\) 值預處理出來。

預處理式子就是:

\[h(j,k,i)=h(j,k,i-1)+f(i)\times g(i,j)\times g(i,k)

\]對於 \(\lfloor\frac\rfloor \leq s\) 可直接查詢。

否則,可知 \(r \leq \lfloor\frac\rfloor\),數論分塊計算即可。

#include using namespace std;

const int mod = 998244353;

const int s = 50;

const int maxn = 1e5;

bool vis[maxn + 7];

int tot, prime[maxn + 7];

int mu[maxn + 7], phi[maxn + 7], invphi[maxn + 7];

int sum[maxn + 7];

int *g[maxn + 7], *t[100][100];

int qpow(int x, int y)

return res;

}void init()

phi[i * prime[j]] = phi[i] * (prime[j] - 1);

mu[i * prime[j]] = -mu[i];

}invphi[i] = qpow(phi[i], mod - 2);

}for (int pp = 1; pp <= maxn; pp++)

for (int q = pp, d = 1; q <= maxn; q += pp, d++)

sum[q] = (sum[q] + pp * (long long)invphi[pp] % mod * mu[d]) % mod, sum[q] += (sum[q] < 0 ? mod : 0);

for (int i = 1; i <= maxn; i++)

for (int j = 1; j <= s; j++)

for (int k = j; k <= s; k++)

}signed main()

printf("%d\n", res);

}return 0;

}

P4240 毒瘤之神的考驗

p4240 毒瘤之神的考驗 假定 n leq m 交換n,m顯然不影響答案 首先尤拉函式有個性質。phi xy frac 代入題目 sum sum frac 然後是喜聞樂見的列舉公因數,在轉化為莫比烏斯函式。sum sum rfloor frac sum rfloor phi xtd sum rfl...

題解 Luogu P4240 毒瘤之神的考驗

p4240 毒瘤之神的考驗 引理 varphi ij dfrac 證明 begin varphi i varphi j gcd i,j i prod p 1 mid i dfrac cdot j prod p 2 mid j dfrac cdot gcd i,j ij gcd i,j left pr...

洛谷P4242 樹上的毒瘤

解 首先有個套路是一條邊的權值是 兩端點顏色不同 這個用樹剖直接維護,支援修改。每次詢問建虛樹,查詢虛樹上每條邊的權值。然後樹形dp,用開店的方法,每個點鏈加鏈查。1 include 2 3 define forson x,i for int i e x i i edge i nex 45 type...