4804 尤拉心算

2021-08-01 11:59:26 字數 1808 閱讀 5243

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]

大力莫比烏斯反演可以得到 an

s=∑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...