尤拉函式求和

2021-08-09 02:03:12 字數 1291 閱讀 9163

沒錯,傻x博主只是吸引你點進來的,我tm不會正解,60暴力送上

#include 

#include

using

namespace

std;

const

int n=99999999;

int phi[n+10],prime[n+10];

int tot;

bool mark[n+10];

long

long getphi(int n)

for(int j=1;j<=tot&&i*prime[j]<=n;j++)

else

phi[i*prime[j]]=phi[i]*(prime[j]-1),ans+=phi[i*prime[j]];}}

return ans;

}int main()

沒有發現進度條不對嗎!

往下看的人才是勇士啊,傻x博主其實給了正解。

前提 i=1

∑d|i

φ(n)=∑n

i=1

∑⌊n/

d⌋i=

1 φ(i)=∑n

d=1 s(⌊n

/d⌋ )=(n*(n+1))/2

所以s(n)=(n*(n+1))/2-∑n

d=2 s(⌊n

/d⌋ )

s我們先預處理出1e7以內的,大的用上面的式子遞迴實現即可

#include 

#include

#define ll long long

using namespace std;

const int n=1e7+1;

ll phi[n+10],prime[n+10];

int tot;

bool mark[n+10];

void getphi(int n)

for(int j=1;j<=tot&&i*prime[j]<=n;j++)

else

phi[i*prime[j]]=phi[i]*(prime[j]-1);}}

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

phi[i]+=phi[i-1];

}ll work(int n)

return (ll)n*(n+1)/2-ans;

}int main()

BZOJ4805 尤拉函式求和

bzoj4805 尤拉函式求和 給出乙個數字n,求sigma phi i 1 i n 正整數n。n 2 10 9 輸出答案。1032 題目要求 sum n varphi i 這。不是很顯然乙個線性篩然後字首和就沒了麼?水題?並不!n leq 2 times 10 9 直接 tle 到 怎麼辦?沒事,...

BZOJ4805 尤拉函式求和

題目大意 對於給定的 n n leq2 times10 9 求 sum n varphi i 思路 設 s n sum n varphi i 因為 sum varphi d n s n sum n i sum 13const int n 1587402,m 120256 14 bool vis n ...

BZOJ 4805 尤拉函式求和

解題思路類似莫比烏斯函式之和 題目大意 求 1,n 內的尤拉函式 varphi 之和。n 2 10 思路 令 m n sum varphi i 題目所求即為 m n 由於 sum varphi d n 所以 sum sum varphi d frac 令 i kd 則有 sum sum varphi...