正题
题目大意
n∗mn*mn∗m的矩阵,求对角线经过多少个格子(经过格子内部才算)。
解题思路
FromZYCdalaoFrom\ ZYCdalaoFrom ZYCdalao的思路:::对于若(n,m)==1(n,m)==1(n,m)==1(互质)则会经过n+m−1n+m-1n+m−1个格子,所以我们可以将n∗mn*mn∗m拆分成gcd(n,m)gcd(n,m)gcd(n,m)个n/gcd(n,m)∗m/gcd(n,m)n/gcd(n,m)*m/gcd(n,m)n/gcd(n,m)∗m/gcd(n,m)的格子于是我们发现答案就是(n/gcd(n,m)+m/gcd(n,m)−1)∗gcd(n,m)(n/gcd(n,m)+m/gcd(n,m)-1)*gcd(n,m)(n/gcd(n,m)+m/gcd(n,m)−1)∗gcd(n,m)
也就是n+m−gcd(n,m)n+m-gcd(n,m)n+m−gcd(n,m)
FromFromFrom本菜鸡的思路:::理论上应该走n+m−1n+m-1n+m−1个格子,但是每个对角线跨过的节点都可以节省一个格子,总共节省gcd(a,b)gcd(a,b)gcd(a,b)个。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b;
int main()
{scanf("%d%d",&a,&b);printf("%d",a+b-__gcd(a,b));
}