Codeforces Div2 597 A_数学

题面:
在这里插入图片描述

题目大意:
给出两个数字,判断这两个数字是否可以表示从某个数开始的所有的数字,如果可以表示则输出Finite, 不能表示就输出Infinite.

解题思路:
可以被表示的数字一定可以被写成这样的算式:ax + by;而ax + by % gcd(a, b) == 0;能被ax + by表示的数字一定对 % gcd(a, b) = 0, 否则则不能被其表示;那么如果gcd(a, b) > 1,则表示不管数字有多大,一定会有数字对gcd(a, b)取模会有余数,所以只有当gcd(a, b) = 1 的时候,才能表示后面所有的数字,所以当a 与 b互质的时候就表示后面所有的可以被染成白色,表示黑色的格子是有限的。否则不能。

证明:
在这里插入图片描述
代码一份:

#include <iostream>
#include <cstdio>

using namespace std;

inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }

int main(void) { 
//	freopen("in.txt", "r", stdin);
	int T; 
	scanf("%d", &T);
	while(T --) {
		int a, b; 
		scanf("%d%d", &a, &b);
		if(gcd(a, b) == 1) puts("Finite");
		else puts("Infinite");
	} 
	
	return 0;
}
发布了179 篇原创文章 · 获赞 1 · 访问量 7583

猜你喜欢

转载自blog.csdn.net/weixin_42596275/article/details/104333102