日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

欧拉公式C++实现

發(fā)布時間:2025/4/16 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 欧拉公式C++实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歐拉函數(shù)Euler(n):求[2,n]中有多少個數(shù)與n互素

直接利用公式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)

其中:

  • pi為x的素因數(shù)
  • 每個素因數(shù)只用一次
    • 比如90=2 * 3^2 * 5
    • φ(90) = 90 * (1-1/2) * (1-1/3) * (1-1/5)
int Euler(int n) {int ans = n;for(int i = 2; i * i <= n; ++i) { //注1if(n % i == 0) { ans = ans - ans/i; //x(1-1/p1)的變形while(n % i == 0) n /= i; //注2}}if(n != 1) ans = ans - ans/i; //注3return n; }

注1:眾所周知,判斷因數(shù)時不用超過根號n,這跟判斷素數(shù)的算法是類似的

注2:前面說到了,每個素因數(shù)只有一次,但是有的素因數(shù)許多很多次冪,比如100=2^2*5^2,此時需要把素因數(shù)除盡。

? 其實,代碼的實現(xiàn)原理不是像我們手動計算時,先找出所有的素因數(shù)然后代入公式。而是“步步蠶食”,有點類似于φ(90)=φ(2) * φ(45) = φ(9) * φ(5) = 6 * 4 = 24,即先把素因數(shù)2消掉,然后把素因數(shù)3消掉,最后把素因數(shù)5消掉。

注3:因為注1的限制,所以我們有的時候會遇到這樣的情況,明明還有素因數(shù)沒有被消掉,就已經(jīng)跳出了循環(huán),比如90,當(dāng)我們消掉3之后,n變成了5,此時就會跳出for循環(huán)。所以我們才需要注3,來消掉素因數(shù)5。

轉(zhuǎn)載于:https://www.cnblogs.com/huangming-zzz/p/10664381.html

總結(jié)

以上是生活随笔為你收集整理的欧拉公式C++实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。