51Nod 1239 尤拉函式之和

2021-08-06 04:44:18 字數 1778 閱讀 9336

acm模版

這個題和那個 51nod 1244 莫比烏斯函式之和 的方法幾乎一模一樣,差別就是推導公式的結果不一樣罷了,但是形式是一樣的。

推導如下: 設 f

(n)=

∑i=1

nφ(i

) 通過尤拉函式的性質我們可以知道: ∑d

|nφ(

d)=n

所以呢,φ(

n)=n

−∑d|n,d

(d)

f(n)

=∑i=

1n(i

−∑d|i,d

(d))

f(n)=n∗

(n+1

)2−∑

i=2n

∑d|i

,d(d)

f(n)

=n∗(

n+1)

2−∑i

=2n∑

d=1⌊

ni⌋φ

(d)

f(n)

=n∗(

n+1)

2−∑i

=2nf

(⌊ni

⌋)公式的形式和 莫比

烏斯函式

之和的款式是一樣的,所以求解方法也是一樣的,依然是分塊兒和記憶化等操作。

#include
#include

#include

using

namespace

std;

typedef

long

long ll;

const

int mod1 = 1e9 + 7;

const

int mod2 = 2333333;

const

int inv_2 = 5e8 + 4;

const

int maxn = 5e6 + 10;

ll n;

int tot;

ll tep[mod2];

ll val[mod2];

int phi[maxn + 5];

int prime[maxn + 5];

int hed[mod2];

int net[mod2];

bool vis[maxn + 5];

void add(int x, ll y, ll z)

ll cal(ll x)

int k = x % mod2;

ll ret = 0, z = x % mod1;

for (int i = hed[k]; i; i = net[i])

}for (ll l = 2, r; l <= x; l = r + 1)

ret = (z * (z + 1) % mod1 * inv_2 % mod1 - ret + mod1) % mod1;

add(k, x, ret);

return ret;

}void init()

for (int j = 1; j <= prime[0]; j++)

vis[k] = 1;

if (!(i % prime[j]))

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

phi[1] = 1;

for (int i = 1; i <= maxn; i++)

}int main()

51nod1239 尤拉函式之和

求 i 1n i n 10 10 這道題和莫比烏斯函式一行,都可以通過神奇的推導的出結論。我們設 n i 1n i 眾所周知,d n d n 那麼,n n d n,d d 於是 n i 1n i d i,d d n n n 1 2 i 2n d i d d n n n 1 2 i d 2n d 1 ...

51nod 1239 尤拉函式之和

求 n i 1 i 1 n 10 杜教篩第二道裸題。必要結論 i n i n 證明 設f n i n i 將n分解質因數,n p qii 利用莫比烏斯函式裡學到的乙個性質,可以得到 f n f pq ii f pq qk 0 pk q k 1p k pk 1 1 p q f n n 設s n n i...

51Nod 1239 尤拉函式之和

s n i 1n i n 是尤拉函式 給定n,求s n mod109 7 2 n 1010 這是我學杜教篩做的第二個題,第乙個就是和這個非常相似的求莫比烏斯函式之和 給大家推薦唐老師的一篇文章,個人感覺講的非常好,我就是在這裡學的 尤拉函式的乙個性質是這樣的n d n d 所以就有n n 1 2 i...