【问题标题】:How do binary computers find if a very big number N (N>10^10) is divisible or not by a small prime p (2<p<30)?二进制计算机如何确定一个非常大的数字 N (N>10^10) 是否可以被一个小的素数 p (2<p<30) 整除?
【发布时间】:2014-12-08 16:17:26
【问题描述】:

如果计算机使用以 6 为底(senary),他们可以很容易地找出 N 是否可以被 2 或 3 整除,并且由于数字和规则(欧米茄和 alpha 总和),他们还可以轻松地确定 N 是否可以被 3 整除5 或 7。

但是计算机使用 base 2(二进制)。所以他们可以很容易地确定 N 是否可以被 2 整除,并且由于数字和规则(alpha 总和),他们还可以确定 N 是否可以被 3 整除。

要确定 N 是否能被 5 整除,他们可以将 N 转换为以 16 为底(十六进制),然后使用数字和规则(欧米茄总和)来确定 N 是否能被 5 整除。

不知道……还有其他方法吗?

【问题讨论】:

标签: binary primes integer-division prime-factoring factorization


【解决方案1】:

它会像解决任何其他 64 位整数一样解决这个问题。

log2 10^10 ~= 33.219

这意味着这个数字和许多其他数字都可以用 64 位整数表示。

你可以测试一下

std::vector<int64_t> primes = {2,3,5,7,11,13,17,19,23,29}; 
int64_t  mynumber = 0x2540BE400;

for (int64_t prime : primes)
{
    if (mynumber % prime == 0)
    {
        std::cout << mynumber << " is divisible by " << prime << std::endl;
    }
}

关于%/的实现细节可以参考以下论文:http://www.diva-portal.org/smash/get/diva2:347845/FULLTEXT01.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-08-30
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多