大衍求一术

int dyqys(int a, int n)
{
    int k[3], r[3], q;
    k[1] = 0, k[2] = 1;
    r[1] = n, r[2] = a;

    while (r[2] != 1)
    {
        r[0] = r[1], r[1] = r[2];
        k[0] = k[1], k[1] = k[2];
        if (r[1] == 0) return -1;
        q = r[0] / r[1];
        r[2] = r[0] % r[1];
        k[2] = (k[0] - q * k[1]) % n;
        if (k[2] < 0) k[2] += n;
    }

    return k[2];
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注