#include<cstdio>
using namespace std;
int GetMaxDiv(int x, int y)
{
while(y)
{
int tmp = y;
y = x%y;
x = tmp;
}
if(x==1)
return 1;
else
return 0;
}
int main()
{
int n;
int a,m;
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&m);
if(m==1)
printf("1\n");
else if(GetMaxDiv(a,m)==0)
printf("Not Exist\n");
else{
for(int i=1;;i++){
if((a*i)%m==1){
printf("%d\n",i);
break;
}
}
}
}
return 0;
}
第一题和最后一题很水,就不写啦
然后倒数第二题;
根据数学公式可知其实就是ax%m=1
求最小的x
问题:为什么m=1时x=1,因为我觉得这种情况应该是不存在;
可是为什么a和m的最大公约数不为1
时一定无解呢?
然后我就发现这个问题才没有这么简单呢,
它涉及到扩展欧几里得的相关知识
gcd(a,b)=gcd(b,a mod b)
所以我们可以知道gcd(ax,m)=gcd(m,1)=1;
所以当m=1时x=1
所以当a和m的最大公约数不为1时,gcd(ax,m)!=1所以等式不成立。
好吧...所以我也不知道为什么王辉大神表示这道题很简单QAQ
然后对于这道题我们就可以暴力求解一发啦啦因为数据太水了