4804: 尤拉心算
time limit: 15 sec memory limit: 256 mb
submit: 229 solved: 147
[submit][status][discuss]
description
給出乙個數字n
第一行為乙個正整數t,表示資料組數。
接下來t行為詢問,每行包含乙個正整數n。
t<=5000,n<=10^7
output
按讀入順序輸出答案。
sample input
10 sample output
136
hint
source
by fancycoder
[submit][status][discuss]
大力莫比烏斯反演可以得到 ans=∑n
i=1∑
nj=1
ϕ(gc
d(i,
j))=
∑ni=
1ϕ(i
)∑⌊n
i⌋d=
1μ(d
)⌊ni
d⌋2 記g
(n)=
∑nd=
1μ(d
)⌊nd
⌋2注意到⌊n
d⌋−⌊
n−1d
⌋=1 成立當且僅當d|
n 那麼g
(n)=
g(n−
1)+∑
d|nμ
(d)(
2nd−
1)由於∑d
|nμ(
d)d=
ϕ(n)
n g(
n)=g
(n−1
)+2ϕ
(d)−
[n=1
] 於是a
ns=∑
ni=1
ϕ(i)
g(⌊n
i⌋)
複雜度o(t
n−−√
)
#include
#include
#include
#include
#define min(a,b) ((a) < (b) ? (a) : (b))
using
namespace
std;
const
int maxn = 5005;
const
int n = 10000007;
typedef
long
long ll;
int t,n,tot,pri[n],q[maxn];
ll phi[n],g[n];
bool not_pri[n];
void solve(int n)
printf("%lld\n",ans);
}int main()
phi[nex] = phi[i] * (pri[j] - 1);
}g[i] = g[i - 1] + 2ll * phi[i];
}for (int i = 2; i <= n; i++) phi[i] += phi[i - 1];
for (int i = 1; i <= t; i++) solve(q[i]);
return
0;}
尤拉心算 bzoj4804
問題 b 尤拉心算 bzoj4804 時間限制 2 sec 記憶體限制 256 mb 提交 74 解決 28 提交 狀態 題目描述 description 給出乙個數字n input 第一行為乙個正整數t,表示資料組數。接下來t行為詢問,每行包含乙個正整數n。t 5000,n 10 7 output...
BZOJ4804 尤拉心算
給出乙個數字n 第一行為乙個正整數t,表示資料組數。接下來t行為詢問,每行包含乙個正整數n。t 5000,n 10 7 按讀入順序輸出答案。110 莫比烏斯反演。還有一種用尤拉函式的神仙做法 begin sum sum n phi i,j sum phi d sum sum n i,j d sum ...
BZOJ4804 尤拉心算
作者部落格 正解 莫比烏斯反演 解題報告 比較簡單的莫烏題,都是老套路了,最後設 q gt 可以根號回答一次詢問。注意後面那個積性函式的遞推公式!邊界不要漏了!it is made by ljh2000 有志者,事竟成,破釜沉舟,百二秦關終屬楚 苦心人,天不負,臥薪嘗膽,三千越甲可吞吳。includ...