洛谷3768 簡單的數學題 題解

2022-05-16 14:12:32 字數 1259 閱讀 1335

題面來自洛谷,因為沒用markdown所以直接截的圖。

剩餘的圖是我用markdown寫完然後截的圖。

參考洛谷第一篇題解。

這個式子直觀感受就需要莫比烏斯反演,大致的過程參考:bzoj2693:jzptab

那麼跳過暴力推式子,我們能夠得到:

(如果你疑問為什麼是miu(k/d)而不是miu(d),其實二者皆可,但是為什麼這麼干請往下看)

顯然可以分塊o(sqrt(n))做,那麼後面的那一串東西怎麼做呢?

參考jzptab的想法的話我們知道後面的式子是積性函式可以o(n)篩出來。

emmm……雖然時間可能能過但是你空間也存不下啊,所以我們要捨棄這個想法。

我們有這樣的式子:

於是我們可以把後面的式子轉換成這個,那麼就變成了:

phi的字首和可以杜教篩做,k^2也是分塊求和。

具體的杜教篩式子可以看:

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=4700050

;ll su[n],phi[n],sum[n],n,p,inv2,inv6;

bool

he[n];

ll maxn=4700000

;map

mp;inline ll s2(ll x)

inline ll s3(ll x)

inline ll sqr(ll x)

ll pow(ll x,ll y)

return

res;

}void euler(int

n)

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

else phi[i*su[j]]=phi[i]*phi[su[j]]%p;}}

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

return;}

ll f(ll x)

return mp[x]=(res+p)%p;

}int

main()

printf(

"%lld\n

",(ans+p)%p);

return0;

}

+++++++++++++++++++++++++++++++++++++++++++

洛谷 3768 簡單的數學題

根據crash的數字 很容易可以將式子化簡為 begin ans sum limits n sum limits ij i,j sum limits n d 3 sum limits right rfloor mu k k 2 left sum limits right rfloor i right...

洛谷 P3768 簡單的數學題

化簡一下式子,就是 sum ncalc d d 2 varphi d 其中 calc d frac frac 1 2 frac 2 可以對calc d 做整除分塊,那麼要求 d 2 varphi d 的字首和 看一眼資料範圍,大概要杜教篩 湊了一會,發現令 f d d 2 varphi d g d ...

洛谷比賽數學題 1

zlh秒的題,我根本不會,出題人欽點此題提高 想來我要爆零了。題面 這題n,a都巨大無比,所以演算法要盡量往k身上靠,先推一波式子 把這裡sigma內的東西拆開得到 第k此項係數c k,k 肯定是1,消去,再換一下i,j列舉順序 這裡就出現了和原式很相似的東西,設乙個二元函式a 剛剛那個式子變為 這...