题目大意:有一个3n∗3m,一开始按照行优先顺序填好1−3n+m的整数,然后每次依照行优先的顺序把所有数取出,按照列优先放回,问多少次操作后,矩阵会合初始状态相同。
解题思路:ans=n+mgcd(n,m
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll gcd (ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);
}
int main () {
int cas;
ll n, m;
scanf("%d", &cas);
for (int kcas = 1; kcas <= cas; kcas++) {
scanf("%lld%lld", &n, &m);
printf("Case %d: %lld\n", kcas, (n + m) / gcd(n, m));
}
return 0;
}