定義爲比大的第個與互質的數,給出和,求最小的。
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;
}