hdu6641 TDL【质数密度】【暴力枚举】【2019 Multi-University Training Contest 6】
题意:
f(n, m) 表示比n大的第m小的与m互质的数
给你k,m 求 (f(n,m)-n)^n = k
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6641
题解:
我们可以枚举 d 的值,因为通过质数密度可以知道,一个数的与第一百个比他大且他互质的数之间的差值绝对不会超过1000
AC_code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll cal(ll n, int m) {
if(n < 1) {
return 0;
}
for(ll i = n+1; ; i++) {
if(__gcd(n, i) == 1) {
m--;
if(!m) {
return i-n;//
}
}
}
}
int main() {
int t, m;
ll k, ans;
scanf("%d", &t);
while(t--) {
scanf("%lld %d", &k, &m);
ans = -1;
for(int d = 1; d <= 1000; d++) {
if(cal(k^d, m) == d) {
if(ans == -1) {
ans = k^d;
} else if(ans > (k^d)) {
ans = k^d;
}
}
}
printf("%lld\n", ans);
}
return 0;
}