题目链接
思路:我们考虑一下什么时候答案是No,推算一下很容易发现,如果构造出来的字符串能够均分的话肯定不行。
假设一:如果m<n:0%n=0,(0+m)%n=m,那么如果n-m如果能被n整除的话答案是不是就是No?,我们推理出K*(n-m)+b=n,(其中如果n%(n-m)0,k=(n/(n-m))-1,否则k=n/(n-m),b就是最后多出来的那一块),b如何求?那个式子是不是很容易想到gcd?其实就是gcd(n,m)=b,那么如果m+b>=n答案就是No。
假设二:如果m>n,0%n=0,(0+m)%n=m%n;推理出k*(n-m%n)+b=n,其实也是b=gcd(n,m),和上面其实一模一样,最后当bn和n==1的时候注意特判一下,因为这个时候的话,它的周期都是0,是满足条件的。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
inline long long read() {
long long tmp=0, fh=1; char c=getchar();
while (c<'0'||c>'9') {if (c=='-') fh=-1; c=getchar();}
while (c>='0'&&c<='9') tmp=tmp*10+c-48, c=getchar();
return tmp*fh;
}
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
n=read();m=read();
ll g=gcd(n,m);
if(n==1||g==n) puts("Yes");
else if(m+g>=n) puts("No");
else puts("Yes");
}
}