【问题标题】:A mod B, A and B are very large numbersA mod B, A 和 B 是非常大的数
【发布时间】:2016-09-30 04:16:20
【问题描述】:

我想知道使用欧几里得算法 A 和 B 是否互质。 A 和 B 是大数,不能以任何数据类型(在 C 中)存储,因此它们存储在链表中。在算法中,使用了运算符%。我的问题是,有没有一种方法可以在不直接使用 % 运算符的情况下计算 A mod B。我发现% 对加法具有分配性:

A%B = ((a1%B)+(a2%B))%B.

但问题仍然存在,因为我仍将进行%B 操作。

【问题讨论】:

标签: modulo largenumber bignum


【解决方案1】:

您需要在没有% 运算符的情况下计算a % b。好的?根据定义,modulo operation 在一个数字除以另一个数字后找到remainder

在python中:

# mod = a % b
def mod(a, b): 
    return a-b*int(a/b)

>>> x = [mod(i,j) for j in range(1,100) for i in range(1,100)]
>>> y = [i % j for j in range(1,100) for i in range(1,100)]
>>> x == y

是的

在 C++ 中:

#include <iostream>
#include <math.h>
using namespace std;

unsigned int mod(unsigned int a, unsigned int b) {
    return (unsigned int)(a-b*floor(a/b));
}

int main() {
    for (unsigned int i=1; i<=sizeof(unsigned int); ++i)
        for (unsigned int j=1; j<=sizeof(unsigned int); ++j)
            if (mod(i,j) != i%j)
                cout << "Somthing wrong!!";
    cout << "Proved for all unsigned int!";
    return 0;
}

证明适用于所有无符号整数!

现在,只需将结果扩展到您的大数字...!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多