列表

详情


NC54831. 字符串

描述

给定两个正整数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的周期,不合题意。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 603ms, 内存消耗: 3752K, 提交时间: 2022-12-03 13:38:11

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll n,m,t;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}

int main()
{
    scanf("%lld",&t);
    while(t--)
    {
        scanf("%lld %lld",&n,&m);
        if((m%n==0)||gcd(n,m)<(n-m))
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 521ms, 内存消耗: 3940K, 提交时间: 2020-01-17 21:07:27

#include<bits/stdc++.h>
using namespace std;
long long n,m,p;
int i,t;
int main()
{
	cin>>t;
	for (i=1;i<=t;i++)
	{
		scanf("%lld %lld",&n,&m);
		p=m;
		m=m%n;
		if (m==0||n==1) printf("Yes\n");
		else if (n==m*2||n%(n-m)==0||p>n) printf("No\n");
		else printf("Yes\n");
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 657ms, 内存消耗: 12164K, 提交时间: 2020-01-17 20:07:44

#include<bits/stdc++.h>
using namespace std;

long long n,m;
int T;

int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%lld %lld",&n,&m);
		if(m>=n && m%n!=0 || m<n && (3*(m-n)==n || 2*m==n || (n%(n-m)==0 && m%(n-m)==0))) printf("No\n");
		else printf("Yes\n");
	}
}

上一题