我正在为我的任务写一个小程序,用来寻找质数的原根。到目前为止,该程序适用于直到13的较小质数,并给出了正确的根数。但是对于更高的素数,它只显示了更少的原根。现在我被质数41卡住了,没有显示它的原根。我使用DOUBLE数据类型进行计算,并再次尝试使用DECIMAL数据类型,但没有成功。有人知道这类问题吗?谢谢。
发布于 2011-02-14 07:34:43
如果您正在尝试查找大整数,您是否尝试过在.NET 4中使用BigInteger?
请注意,将整数存储在double中不是一个好主意-因为并不是其范围内的每个双精度值都能被准确地存储。decimal可以精确地存储整数,但最多只能存储28或29位数字……从根本上说,这仍然是一个糟糕的想法,因为你试图表示整数。
另一方面,你所说的“固守质数41”并不是真的很清楚。你确定它是你想要的一个大整数数据类型吗?
发布于 2011-02-14 07:44:57
这更有可能是算法问题,而不是数据大小问题。你的算法只需要将两个小于你想要求根的质数的值相乘即可。而不是直接将候选者提升到每个小于p的幂,然后取结果mod p,从1开始,然后重复乘以您正在测试的值,并在每一步之后取结果mod p这意味着您永远不需要处理大于p * candidate的数字,并且将能够仅使用int或long来处理非常大的数字。
发布于 2011-02-14 07:46:44
素数总是整数,所以不需要使用双精度。如果您的计算在41失败,则问题与您正在使用的数据类型的大小无关。你需要发布你正在使用的代码。
https://stackoverflow.com/questions/4987601
复制相似问题