日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两种欧拉函数模板

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两种欧拉函数模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

求歐拉函數代碼的方式:直接求和打表
歐拉函數的作用:一個數n,求小于n的互質的個數。特例:1——oula(1)=1;
歐拉函數的公式:

其中i為x所有質因數。注意:每種質因數只一個
為什么會這樣?首先,互質的兩個數一定不能有公共因數。比如9和7互質,9和12不互質,因為有共同因數3.

那么我難道需要一個個循環比較嗎?

答案先然不可能,因為如果數值過大這是個很大的復雜度。那么我該如何處理?
換一種思維。比如求24中的互質個數。答案是1,5,7,11,13,17,19,23。共8個

  • 24=2 * 2 * 2 * 3;那么在小于12中的數的核心共同質數為2的倍數或者三的倍數。有人可能說明明還要4,6的倍數,那是因為這些倍數囊括在2,3之中。所以我們每個質因數只記錄一個
  • 看在24中,有1/2的是2的倍數,也就是1/2的數是和24有共同因數2.那么就有(1-1/2)的數和24沒有共同因數2;
  • 同理那么就有1/3的數和24有共同因數3,并且(1-1/3)=2/3的數沒有共同因數3.那么沒有因數2和因數三剩下的不就是和24互質么,那么概率=(1-1/2)* (1-1/3)=1/3.總個數為24*1/3=8滿足要求。
  • 如果一個因數出現多次怎么排除呢。或者怎么防止4,6這些數被計入因數中,這就要用到質因數分解的思想。只不過我們不需要這個冪出現的次數,只需要讓剩余的不可能在存在當前這個數為因數的可能性。
  • 附上直接求代碼:

    private static int oula(int team) {int i=0;int res=team;int team1=team;for(i=2;i<(int)Math.sqrt(team1) 1;i ){if(team%i==0) {res=res/i*(i-1);while(team%i==0) {team/=i;}//保證沒有i作為因子 }}if(team>1)res=res/team*(team-1);//說明后面還有一個比較大的互質因數大小為teamreturn res;}

    其中,res為結果,team1作為求因數用。如果實在不能理解,好好看下質因數分解。

    打表代碼:

    int a[]=new int[1000001];for(int i=1;i<1000001;i ){a[i]=i;}for(int i=2;i 2<1000001;i =2){a[i]/=2;}for(int i=3;i 2<1000001;i =2){if(a[i]==i){for(int j=i;j i<=1000001;j =i){a[j]=a[j]/i*(i-1);}}}

    如果對后端、爬蟲、數據結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai

    總結

    以上是生活随笔為你收集整理的两种欧拉函数模板的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。