【发布时间】:2019-03-16 00:39:08
【问题描述】:
我正在写一篇关于质数在当今密码学中的重要性的文章。我想开发一个小型应用程序,显示用 C(至少对我来说是低级语言)编写的程序需要多长时间才能将复合数分解为素数。我想出了一个简单的算法来做到这一点,但我遇到了一个问题:
我希望用户能够输入巨大的数字,例如:77777777777777777777777777772
所以计算机需要几个小时来处理它,显示我们基于素数的密码学有多好。
但在 C 中,我能找到的最大数据类型是 LONG,最高可达 2147483646。
你们知道我如何能够在 C 中输入和处理一个大数字吗?
提前致谢
【问题讨论】:
-
查找“多字整数”或“任意精度整数”。有诸如 GMP 之类的库可以对此类对象进行算术运算。
-
"在 C 中我能找到的最大数据类型是 LONG" --> 试试
uintmax_t。那至少是18446744073709551615。 7777777777777777777777777772(一个 93 位的数字)还不够。查看支持int128_t的实现。当然这个数字777...772不是素数。 -
但是即使你这样做,它也只是显示你的算法的行为,而不是分解实际上很难。
-
@harold,您认为如何向学生展示现代计算机将复合数分解为素数是多么困难的最佳方式?我愿意接受建议,因为我确实希望他们理解这个概念
-
好吧,我不确定。大数的因式分解技术,例如 GNFS,需要大量的基础工作才能理解它们的作用,并且由于过于复杂而无法作为练习来重现。更简单的算法在处理目前不被认为难以分解的数字时遇到很多问题,例如 RSA-100
标签: c math numbers integer primes