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
说明:
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"); } }