牛客挑战赛36 B 字符串(规律)

题目链接
在这里插入图片描述
在这里插入图片描述
思路:我们考虑一下什么时候答案是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),和上面其实一模一样,最后当b
n和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");
	}
 } 
发布了39 篇原创文章 · 获赞 0 · 访问量 1079

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104031321