題面來自洛谷,因為沒用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 剛剛那個式子變為 這...