p4240 毒瘤之神的考驗
假定\(n \leq m\) ,(交換n,m顯然不影響答案)
首先尤拉函式有個性質。。 \(\phi(xy)\)
\(=\)
\(\frac\)
代入題目 \(\sum_^\sum_^\frac\)
然後是喜聞樂見的列舉公因數,在轉化為莫比烏斯函式。。。
\(\sum_^\sum_^ \rfloor} \frac \sum_^\rfloor}
\phi(xtd) \sum_^\rfloor}\phi(ytd)\)
我們設:
\(a(p)\)
\(=\)
\(\sum_\frac \mu(\frac)\)
\(d(x,p)\)
\(=\)
\(\sum_^\phi(ip)\)
於是答案可以表示為 \(\sum_^a(p)d(\lfloor \frac \rfloor,p)d(\lfloor \frac \rfloor,p)\)
\(a(p),d(x,p)\)兩種函式都是可以\(o(nlogn)\)預處理出來的,於是此時我們已經得到\(o(nlogn+qn)\)的做法了
我們需要進一步優化單次詢問的效率。
設 \(s(lim,x,y)\)
\(=\)
\(\sum_^a(p)d(x,p)d(y,p)\)
如果對於任意\(s(lim,x,y)\)都能\(o(1)\)詢問的話,就可以套用整除分塊了。。。然而這並不容易做到。
我們可以先預處理一些\(s(lim,x,y)\),這樣對於部分p值就能快速詢問了。
假設我們預處理出所有滿足\(x,y \leq b\)的資料,那麼對於 \(\lfloor \frac \rfloor \leq b\) 的都可以\(o(1)\)詢問,這部分效率是\(o(n^)\)的
對於\(\lfloor \frac \rfloor > b\) 的情況,這樣的p是滿足\(p<\lfloor \frac \rfloor\),這部分直接算,不用整除分塊,效率是\(o(\lfloor \frac \rfloor)\)
於是總效率就是\(o(nlogn+q(n^+\lfloor \frac \rfloor))\)
#include #define ll long long
using namespace std;
const int n=1e5+10;
const ll p=998244353;
const int e=90;
int read()
while(ch>='0'&&ch<='9')
return x*f;
}void print(ll x)
ll qpow(ll x,ll y,ll p)
return re;
}int n,m;
ll phi[n],mu[n];
ll ni_phi[n];
ll a[n];
vectord[n],s[100][100];
bool is_pri[n+10];
int pri[n],cntp=0;
void init_pri()
for(int j=1;j<=cntp&&pri[j]*i<=100000;++j)
else}}
}int main()
a[i]=a[i]%p;
}for(int p=1;p<=100000;++p)
}for(int i=1;i<=e;++i)}}
int t,k,l;scanf("%d",&t);
ll ans;
while(t--)
else
}ans=(ans%p+p)%p;
printf("%lld\n",ans);
}return 0;
}
P4240 毒瘤之神的考驗
求 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...
題解 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...