字符串
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

给定两个正整数n,m。问能否构造出一个长度为n的字符串s[0..n-1],满足以下两个条件:

1. 对于n的任意正因数d(d<n),d不是s的周期。

2. 对于∀i∈[0,m-1],s[i mod n]=s[(i+m) mod n]。

输入描述:

输入包含多组数据。

第一行包括一个正整数T。

接下来T行,每行包括两个正整数n,m。

输出描述:

对于每组数据输出一行。若能构造出符合条件的字符串,输出“Yes”,否则输出“No”。(均不含引号)
示例1

输入

复制
7
1 3
3 5
3 6
7 2
6 3
10 6
10 8

输出

复制
Yes
No
Yes
Yes
No
Yes
No

说明

第一组:s="a"满足题意
第二组:需要满足s[0]=s[(0+5) mod 3]即s[0]=s[2]、s[1]=s[(1+5) mod 3]即s[1]=s[0]。故s[0]=s[1]=s[2],1是s的周期,不合题意。
第三组:s="abc"满足题意
第四组:s="ababccc"满足题意
第五组:需要满足s[0]=s[3],s[1]=s[4],s[2]=s[5]。故3是s的周期,不合题意。
第六组:s="abcdababcd"满足题意
第七组:需要满足s[0]=s[8],s[1]=s[9],s[2]=s[0],s[3]=s[1],s[4]=s[2],s[5]=s[3],s[6]=s[4],s[7]=s[5],即s[0]=s[2]=s[4]=s[6]=s[8],s[1]=s[3]=s[5]=s[7]=s[9]。故2是s的周期,不合题意。

备注:

T=1*106

1≤n,m≤1018

可以认为字符集的大小大于n。

字符串周期的定义:

对于字符串s[0..l-1],若正整数t满足对于∀i∈[0,l-t-1],s[i]=s[i+t],则称t为字符串s的周期。
本题输入规模较大,请使用较快的读入方式或者使用以下读入模板:
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;
}
用法:
long long n=read(), m=read();