码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-14 21:33:30      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:ref   microsoft   name   基本   namespace   一个   get   不能   AC   

题目传送门

此题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表(升级版) 题解

标签:ref   microsoft   name   基本   namespace   一个   get   不能   AC   

原文地址:https://www.cnblogs.com/yzx1798106406/p/9038098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!