bzoj2693 jzptab(反演LCM之和)

2021-08-14 04:55:32 字數 1417 閱讀 5012

乙個正整數t表示資料組數

接下來t行 每行兩個正整數 表示n、m

t行 每行乙個整數 表示第i組資料的結果

1 4 5

t <= 10000

n, m<=10000000

分析:

關於式子的反演:lcm之和

(我實在不想再來一遍,不過聽說舒老師有一種好方法,只能等ta傳授了)

所以我們就有了這個式子:

但是我們這樣就需要列舉兩個量,即使是分塊,時間複雜度還是無法承受

所以我們利用bzoj2820的奇技淫巧:

令 t=k*d

這樣就改變了列舉順序

如果我們能預處理出

我們就可以在sqrt(n)的時間內求出答案了

積性函式的乘積也是積性函式,可以線性篩

注意強制型別轉換

//這裡寫**片

#include

#include

#include

#define ll long long

using namespace std;

const int n=1e7+2;

const ll p=100000009;

int n,m;

ll sum[n];

int sshu[n>>2],tot=0;

bool no[n];

void make()

for (int j=1;j<=tot&&sshu[j]*i

no[sshu[j]*i]=1;

if (i%sshu[j]==0)

sum[i*sshu[j]]=(ll)(sum[i]%p

*sum[sshu[j]]%p)%p; //ll}}

for (int i=2;i%p+sum[i-1]%p)%p;

}ll sum(int n,int

m)int main()

printf("%lld\n",ans);

}return 0;

}

BZOJ 2693 jzptab 莫比烏斯反演

題意 2154 crash的數字 莫比烏斯反演,多組詢問,t 10000。演算法 數論 莫比烏斯反演 題解 由上一題,ans sum g sum mu d d 2 sum n gd,m gd 令t gd ans sum sum n t,m t t sum mu d d 後面部分由積性函式的乘積和約數...

BZOJ5330 SDOI2018 反回文串

luogu bzoj 列舉乙個長度為 n 為回文串,它的所有迴圈位移都可以產生貢獻。但是這樣算重了。重複的地方在於可能多個回文串迴圈同構,或者可能有的回文串經過小於 n 次迴圈位移後能夠得到自身。乙個比較好的處理方式是 對每個回文串求最小的 x 使這個串經過 x 次迴圈位移後可以再次成為乙個回文串。...

bzoj 3706 反色刷 一筆畫

首先,對於乙個連通子圖,如果存在乙個方案把 所有邊都變成白色,這個方案一定可以只經過黑邊。然後對於每乙個子圖,就是小時候玩的一筆畫了。乙個一筆畫存在回到原點的方案當且僅當所有點的度數都是偶數,這樣就可以判定可行性,如果可行,答案就是有黑邊的極大連通子圖個數。include include inclu...