关于欧拉函数
歐拉函數,
對正整數n,歐拉函數是少于或等于n的數中與n互質的數的數目。
這是我在ACM隊內訓練賽的時候遇到的一個函數,其實最初是在離散數學課本上了解到了這個函數,但是當時并沒有留下太深的印象,現在總結一下。
首先要知道歐拉函數的公式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn)
其中p1,p2,p3是x的所有質因子。
1.第一種算法:
直接求法:
暴力遍歷x的所有質因子直接求解:
其中while(a%i==0) a/=i;?是在進行保證可以整除的是素數的過程。
另外,for(int i=2;i*i<=a;i++)也利用了素數篩選法的思想。
2.第二種算法:
篩選法打表求歐拉函數
打表求值,不斷求得。
2017-06-26 17:43:32 星期一 更新
今天在《算法競賽入門(第二版)》(紫書)上看到了一種利用類似與素數篩選法的方法直接求由1~n的所有歐拉函數值的辦法。
給出代碼:
利用這個辦法可以在nloglogn的復雜度內求得由1到n的所有歐拉函數值。
2017-08-09 ?12:48:12
新增一些歐拉函數的性質:
1.如果一個數x是素數,則該數的歐拉函數值為x-1。
2.若m,n互質,
3.當n為奇數時,轉載于:https://www.cnblogs.com/DLKKILL/p/7245254.html
總結
- 上一篇: BZOJ 2244: [SDOI2011
- 下一篇: Nodejs--url模块