poj2773 容斥原理

2022-03-21 02:57:24 字數 1007 閱讀 8422

這個題的意思是給你兩個數m, k, 讓你求出與m互質的第k個數, 設想對於乙個數r,我們可以求出小於等於r與m互質的數的個數, 那麼我們就可以使用二分很快的求解。 假設我們把m唯一分解 m = p1^a1 * p2^a2 * ... * pi^ai, 那麼小於等於r與m互質的數中不應該有p1 p2 .. pi這些因子, 因此問題轉化成求解小於等於r且不含有p1, p2 p3 .. pi因子的數的個數, 這可以使用容斥原理來接覺, 假設ai是不含有因子pi的數的個數那麼答案就是 r - (a1+a2+ .. ai) + (ai並aj i!=j) -  ... ai = r/pi. **如下:

#include #include 

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn = 100000 + 10

;int

m, k;

intpi[maxn], npi;

bool

vis[maxn];

intprime[maxn], num;

void shai(int

n)ll check(ll r)

//求解r中與m互質的數目

return

res;

}int

main()

if(tp == 1) break

; }

if(tp != 1) pi[npi++] =tp;

ll l=1, r=0x3f3f3f3f3f3f3f3f

; ll res = 1

;

while(l <=r)

else l = mid + 1

; }

cout

}return0;

}

POJ 2773 二分 容斥原理

給m k 求與m互質的第k個數 1 m 1000000 k 1 k 100000000 k比較大,對於乙個數n,1到n以內和m互質的數可以通過容斥原理很快算出來,並且隨n遞增 因此二分k就好了 include include include include include includeusing ...

POJ2773 容斥 二分

題目要求和m互質的第k大。那麼二分區間,統計區間內和m互質的數個數,所有個數為k結果最小的就是答案。k比較大最初二分的右端點開大點。include include include include include include using namespace std define maxn 1111...

poj3904 容斥原理)

可以得到這樣的關係 奇數加 偶數減 題目大意 給一串數字,求解互質四元組的個數 注意不必兩兩互質 解題思路 網上有很多 但是詳細講解的很少,這裡結合筆者的思路詳細論述一下解題思路,耐心一看。首先容易想到,想計算不互質的四元組的個數,再用總的減去,關鍵是怎樣計數不互質四元組的個數?列舉公約數,對於同乙...