GCD

来源:互联网 发布:幼儿园小班美工课程 编辑:程序博客网 时间:2024/05/16 04:42

ACM模版

GCD最大公约数

int gcd(int x, int y){    if (!x || !y)    {        return x > y ? x : y;    }    for (int t; t = x % y, t; x = y, y = t);    return y;}

快速GCD

int kgcd(int a, int b){    if (a == 0)    {        return b;    }    if (b == 0)    {        return a;    }    if (!(a & 1) && !(b & 1))    {        return kgcd(a >> 1, b >> 1) << 1;    }    else if (!(b & 1))    {        return kgcd(a, b >> 1);    }    else if (!(a & 1))    {        return kgcd(a >> 1, b);    }    else    {        return kgcd(abs(a - b), min(a, b));    }}

扩展GCD

/* *  求x,y使得gcd(a, b) = a * x + b * y; */int extgcd(int a, int b, int &x, int &y){    if (b == 0)    {        x = 1;        y = 0;        return a;    }    int d = extgcd(b, a % b, x, y);    int t = x;    x = y;    y = t - a / b * y;    return d;}
1 0
原创粉丝点击