篩選法求尤拉函式

2021-10-23 11:33:29 字數 916 閱讀 7185

可以借鑑之前的求質因數分解的線性求法。對於要求1~n上的尤拉函式的和

尤拉函式定義如下:

那麼φ(pi * n)等於多少呢?

由定義可以知道,尤拉函式和質因子的次方無關。因此這時候要分類討論

1.pi 如果是n的質因子,那麼φ(pi * n) = pi * φ(n)

2.如果不是,φ(pi * n) = pi * φ(n)* (pi - 1) / pi

**實現如下:

#include

using

namespace std;

const

int n =

1000010

;typedef

long

long ll;

int euler[n]

, prime[n]

, cnt;

bool st[n]

;//借助篩選尤拉函式

ll get_euler

(int n)

for(

int j =

0; prime[j]

<= n / i; j ++

) euler[prime[j]

* i]

=(prime[j]-1

)* euler[i];}

}

ll res =0;

for(

int i =

1; i <= n ; i++

) res +

= euler[i]

;return res;

}int

main()

AcWing 篩法求尤拉函式 篩法 尤拉函式

時 空限制 1s 64mb 給定乙個正整數n,求1 n中每個數的尤拉函式之和。共一行,包含乙個整數n。共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。1 n 10 6 題意 求1 n中每個數的尤拉函式之和。思路 在這個題目中我們不能直接分別去求1 n之間的尤拉函式,會超時,所以我們就可以根據...

素數篩選法和尤拉篩選法

素數判斷 素數篩選法 用素數篩選合數 include include define max n 100 素數篩選法 int prime max n 5 初始化為0 void init int main printf n return0 求2 n內每個數的最小素因子 include include d...

篩法求尤拉函式

題目鏈結 題意 給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 1e6 輸入樣例 6輸出樣例 12思路 如果直接用尤拉函式每次求一遍質因數的話就是o n sqrt n 的時間複雜度...