51nod1239 尤拉函式之和

2021-07-14 11:36:40 字數 1541 閱讀 7928

求∑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

⌊nid

⌋φ(d

) ϕ(

n)=n

∗(n+

1)2−

∑i=2

n∑d=

1⌊ni

⌋φ(d

) ϕ(

n)=n

∗(n+

1)2−

∑i=2

nϕ(⌊

ni⌋)

於是和那道題一樣做就好了。

還有一種做法。

這個問題的本質就是1~n中兩兩互質的數的對數。

那麼我們可以用反演搞出來乙個式子an

s=∑i

=1nμ

(i)⌊

ni⌋2

然後就分塊搞就行了。

不過還是需要莫比烏斯函式字首和。

參照51nod1244

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define rep(i,a) for(int i=last[a];i;i=next[i])

#define n 5000000

using namespace std;

typedef long long ll;

const int mo=1000000007;

const int mo=2333333;

const int ni=500000004;

int phi[n+5],p[n+5],l;

intlast[mo],next[mo];

bool bz[n+5];

ll n,t[mo],v[mo];

void add(int

x,ll y,ll z)

ll calc(ll x)

int main()

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

phi[1]=1;fo(i,1,n) (phi[i]+=phi[i-1])%=mo;

scanf("%lld",&n);printf("%lld",calc(n));

}

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 尤拉函式之和

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...

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...