51NOD 1239 尤拉函式之和(杜教篩)

2021-08-14 06:51:47 字數 1366 閱讀 7471

題目鏈結

分析:

這道題看的是唐老師的blog

感覺還是一知半解,然而學校裡的dalao都去長沙了

只留下我們這些蒟蒻(然而蒟蒻沒有dalao的點撥怎麼學習啊。。。)

用了將近一小時,終於理解了,嘗試著來化簡一下:

我們要求的是

在化簡之前,先提出phi函式的乙個性質:

我們就從這個式子下手:

具體的:

好像有兩種實現方法:分塊法 or 記憶化搜尋

我在這裡用的記憶化搜尋,同時還要配合簡單的hash:

int hash(ll x)   //簡單的hash 

非常簡陋的hash,但是竟然管用。。。

空間卡的挺緊,只能開乙個ll的陣列

注意取%

#include

#include

#include

#include

#define ll long long

using namespace std;

const int maxn=1e7+5;

const int n=1e6+5;

const ll p=1000000007;

const ll ni=500000004;

ll h[maxn],n;

int phi[n],tot=0,sshu[n],sum[n],f[maxn];

bool no[n];

void make()

for (int j=1;j<=tot&&sshu[j]*i

no[sshu[j]*i]=1;

if (i%sshu[j]==0)

phi[i*sshu[j]]=phi[i]*phi[sshu[j]];}}

for (int i=1;i1]+phi[i])%p;

}int hash(ll x) //簡單的hash

ll cal(ll n)

x=(x

%p+p)%p;

h[l]=n; f[l]=x;

returnx;}

int main()

printf("%lld\n",cal(n));

return

0;}

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

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