沒錯,傻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...