HDU 6641 TDL 异或性质
定义为比大的第个与互质的数,给出和,求最小的。
Source:2019 Multi-University Training Contest 6
因为异或满足自反性,不妨另,则,因为,所以不会超过1e3(具体最大没算过,1e3完全足够了),我们可以枚举,然后找出最小的满足条件即可。
UPD:wa了两次最后发现是inf开小了…
#include <bits/stdc++.h>
#define ll long long
ll gcd(ll p, ll q) { return q == 0 ? p : gcd(q, p % q); }
using namespace std;
const long long inf = ((1LL<<62)-1)|(1LL<<62);
const int maxi = 1e3 + 10;
ll k,m;
ll f(ll n,int m){
ll cnt=m,i=n;
while(cnt){
i++;
if(gcd(n,i)==1) cnt--;
}
return i;
}
int main() {
int T;
scanf("%d", &T);
while(T--){
scanf("%lld%lld",&k,&m);
ll minn=inf;
for(ll i=0;i<=maxi;i++){
ll n=i^k;//n=(k^n)^k
if(n && f(n,m)==n+i) {
minn = min(minn, n);
}
}
if(minn==inf) printf("-1\n");
else printf("%lld\n",minn);
}
return 0;
}
浙公网安备 33010602011771号