題意
給你n ,m
n,mn,
m,讓你找到第k
kk個與n
nn和m
mm互素的數。
思路:範圍比較大,我們可以先找出n
nn和m
mm的質因子,然後二分答案。每次容斥判定mid
midmi
d是第幾個與n
nn和m
mm互質的數字。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define read(x) scanf("%d", &x)
#define read(x, y) scanf("%d%d", &x, &y)
#define gc(x) scanf(" %c", &x);
#define mmt(x, y) memset(x, y, sizeof x)
#define write(x) printf("%d\n", x)
#define inf 0x3f3f3f3f
#define ll long long
#define mod 998244353
const ll n =
1e5+5;
ll prime[n]
;int idx =0;
ll ok
(ll n)}if
(cnt &
1) ans +
= n / p;
else ans -
= n / p;
}return n - ans;
}int
main()
}if(m >1)
prime[
++idx]
= m;
for(ll i =
2; i * i <= n;
++i)}if
(n >1)
prime[
++idx]
= n;
ll l =
1, r =
1e14
;sort
(prime +
1, prime + idx +1)
;int p =
unique
(prime +
1, prime + idx +1)
- prime -1;
idx = p;
while
(l < r)
//二分答案
printf
("case %d: %lld\n"
,case,r);}
}
hdu3388Coprime 二分 容斥原理
找第k個和n,m互質的數 由容斥原理可得 在 1,x 範圍內且與n不互質的數的個數為 對於所有的n的素數因子 和乙個素數因子不互質的個數 兩個素數因子相乘的個數 三個素數因子相乘的個數 對於x越大,在 1 x 範圍內的與n,m互質的數越多,所以存在單調性,可以用二分找到剛好有k個數和n,m互質 in...
HDU3388 二分 容斥原理
題目 coprime 題意 給三個數m,n,k,0 思路 二分 容斥原理 由於所找的數與m,n互質,那麼這個數不能含有m,n所包含的素因子。但是k很大,不可能乙個乙個生成。於是二分,找到最小 的x,使得小於或等於x的數中滿足條件的 數的個數大於或等於k,則這個最小值即為答案。在判斷小於或等於x的數中...
hdu4135 Co prime 互素統計
題意 統計 l,r 中與m互素的數的個數 解法 1.求字首 1,r 中與m互素的個數 2.求反面 不互素的個數,再將m分解質因子,轉化為整除問題 a,m 1,則m至少有乙個質因子整除a。ans a 1 a2 ak ai 為 1,r 中m的第i個質因子的倍數集合 複雜度 o m logm 與區間大小無...