題目:coprime
題意:給三個數m,n,k, 0
思路:二分+容斥原理
由於所找的數與m,n互質,那麼這個數不能含有m,n所包含的素因子。但是k很大,
不可能乙個乙個生成。於是二分,找到最小
的x,使得小於或等於x的數中滿足條件的
數的個數大於或等於k,則這個最小值即為答案。
在判斷小於或等於x的數中滿足條件的數
的個數時,可用容斥原理找出這些數中是m,n所含質因子倍數的數的個數。x減去所得
個數即為
小於或等於x的數中滿足條件的數的個數。
#include #include #include #include using namespace std;
typedef long long ll;
const int n=1000005;
const ll inf=(ll)1<<62;
bool prime[n];
ll p[n];
ll fac[n];
ll k,cnt,num,ans,n,m,k;
void isprime()
}if(m>1)
fac[cnt++]=m;
}void dfs(ll k,ll t,ll s,ll n)
dfs(k+1,t,s,n);
dfs(k+1,t+1,s*fac[k],n);
}ll binary()
else
l=mid+1;
}return ret;
}int main()
solve(m,n);
sort(fac,fac+cnt);
num=1;
for(ll i=1; i}
ct=num;
printf("%i64d\n",binary());
}return 0;
}
hdu3388Coprime 二分 容斥原理
找第k個和n,m互質的數 由容斥原理可得 在 1,x 範圍內且與n不互質的數的個數為 對於所有的n的素數因子 和乙個素數因子不互質的個數 兩個素數因子相乘的個數 三個素數因子相乘的個數 對於x越大,在 1 x 範圍內的與n,m互質的數越多,所以存在單調性,可以用二分找到剛好有k個數和n,m互質 in...
HDU3388 Coprime(二分 容斥)
題意 給你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 inc...
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 ...