洛谷P1482 Cantor表(升级版) 题解

Posted yzx1798106406

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷P1482 Cantor表(升级版) 题解相关的知识,希望对你有一定的参考价值。

题目传送门

此题zha一看非常简单。

再一看特别简单。

最后瞟一眼,还是很简单。

所以在此就唠一下GCD大法吧:

int gcd(int x,int y){
    if(x<y) return gcd(y,x);
    if(y==0)  return x;
    if(x%2==0)
        if(y%2==0) return 2*gcd(x>>1,y>>1);
        else return gcd(x>>1,y);
    else
        if(y%2==0) return gcd(x,y>>1);
        else return gcd(y,x-y); 
}

优化过后的GCD↑

基本思路就是,如果x,y都为偶数,两数同乘2且求GCD(x/2,y/2) //分治思想

否则如果x、y任意一个是偶数,那么就把偶数的/2,因为另一个数并不是偶数,所以公因数怎么也不能*2(当前)。

最后一种情况就是取GCD(y,x-y)。因为x、y都是奇数。

这道题的程序:

#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
    if(x<y) return gcd(y,x);
    if(y==0)  return x;
    if(x%2==0)
        if(y%2==0) return 2*gcd(x>>1,y>>1);
        else return gcd(x>>1,y);
    else
        if(y%2==0) return gcd(x,y>>1);
        else return gcd(y,x-y); 
}
int main(){
    int a,b,c,d,t;
    scanf("%d/%d",&a,&b);
    scanf("%d/%d",&c,&d);
    t=gcd(a*c,b*d);
    printf("%d %d",b*d/t,a*c/t);
    return 0;
}

以上是关于洛谷P1482 Cantor表(升级版) 题解的主要内容,如果未能解决你的问题,请参考以下文章

洛谷1014 Cantor表

洛谷 P1014 Cantor表

洛谷——P1014 Cantor表

洛谷 P1014 Cantor表蛇皮矩阵/找规律/模拟

P1014 Cantor表

3.Cantor表