乙個正整數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...