可以借鑑之前的求質因數分解的線性求法。對於要求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 的時間複雜度...