hdu 4135 Co prime 容斥原理

2021-07-04 07:16:19 字數 745 閱讀 9149

題目:

大意:求區間[a, b]內與n互質的數的個數。

分析:單純來逐個判斷互質統計結果肯定會超時,那麼可以對n素因子分解,以素因子的個數作為迴圈的上界(第二層迴圈),第一層是列舉素因子,運用容斥原理來統計不互質的個數,最後再用總數減去不互質的個數就是互質的個數。【容斥原理也就是提供了這樣間接求解的思想:先不考慮重疊的情況,把包含於某內容中的所有物件的數目先計算出來,然後再把計數時重複計算的數目排斥出去。容斥原理是用來求多個集合的並集的一種方法: |s |= |奇數個集合的並集| - |偶數個集合的並集| (奇加偶減)這樣避開了用值很大的數字b作為迴圈上界,最後直接用b-a+1減去互質個數即可。二進位制列舉,列舉的物件在第二層】

#include #includeusing namespace std;

const int maxn=1e7+10;

typedef long long ll;

ll sta[maxn],top=0;

void fenjie(ll m)

}if(m>1)sta[top++]=m;

}int main()

if(sum&1)ans+=(b/temp-(a-1)/temp);

else ans-=(b/temp-(a-1)/temp);

}printf("case #%lld: %lld\n",++ca,b-a+1-ans);

}return 0;

}

hdu4135 co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。思路 求a到b之間的與c互素的數,等價於求1到b之間與c互素的數減去1到a之間與c互素的數。求 中與 互質的數的個數都是用尤拉函式,但如果 比較大或者是求 中與 互質的數的個數等等問題,要想時間效率高的話還是先對n分解質因數然後用容斥原理,這裡可以用...

hdu4135Co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。分析 我們可以先轉化下 用 1,b 區間與n互質的數的個數減去 1,a 1 區間與n互質的數的個數,那麼現在就轉化成求 1,m 區間於n 互質的數的個數,如果要求的是 1,n 區間與n互質的數的個數的話,我們直接求出n的尤拉函式值即可,可是這裡是行不...

HDU 4135 Co prime 容斥原理

題目鏈結 統計在大區間 a,b 中與n互質的數的個數,其中a,b都在10的15次方級。暴力肯定不行,正難則反,思考求 a,b 中不與n互質的數的個數,那麼該數必然是n的其中乙個因子的倍數,所以首先對n的所有因子進行打表,然後根據每乙個因子求在 a,b 區間中其倍數的個數。在不同的因子進行計數的時候可...