bzoj 1876 [SDOI2009]SuperGCD

    xiaoxiao2025-10-30  9

    Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD。有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个程序来教训他。 Input 共两行: 第一行:一个数A。 第二行:一个数B。 Output 一行,表示A和B的最大公约数。 Sample Input 12 54 Sample Output 6 HINT

    对于20%的数据,0 < A , B ≤ 10 ^ 18。 对于100%的数据,0 < A , B ≤ 10 ^ 10000。

    10^10000让常用的辗转相除无用武之地。其实求gcd还有另一种方法:更相减损术

    第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。 第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。 则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

    求gcd(260,104) 由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。 此时65是奇数而26不是奇数,故把65和26 辗转相减: 65-26=39 39-26=13 26-13=13 所以,260与104的 最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。

    这样的时间复杂度是O(n)的,因为平时大多只需考虑正常范围的数,以及多组询问的要求,所以这种依靠减法的求gcd方式一直没有出现。 正解就是写个高精度的事情啦。 python大法好

    a=(int)(input()) b=(int)(input()) while b!=0: t=a a=b b=t%b print(a)
    转载请注明原文地址: https://ju.6miu.com/read-1303663.html
    最新回复(0)