题意:给出一个公式 和公式上的m,k试着求是否有n可以符合上面的公式,若有这输出,没有这输出-1
思路:
1.对于f(n,m)因为与n互质的数很大所以求f(n,m)的时间复杂度并不是很高
2.对于给出的k,我们是可以利用k来计算出n的取值范围然后再进行暴力枚举
推导如下(吧)
#include <stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f(ll n,ll m)
{
ll i;
int cnt=0;
for(i=n+1;;i++)
{
if(__gcd(i,n)==1)
{
cnt++;
}
if(cnt==m)
{
return i;
}
}
}
int main(int argc, char *argv[])
{
int t;
cin>>t;
while(t--)
{
ll k,m;
cin>>k>>m;
ll F,L;
if(k<1010)
{
F=1;
L=k+1010;
}
else
{
F=k-1010;
L=k+1010;
}
ll i;
bool judge=false;
for(i=F;i<L;i++)
{
if(f(i,m)-i==(k^i))
{
cout<<i<<endl;
judge=true;
break;
}
}
if(!judge)cout<<-1<<endl;
}
return 0;
}