最高值数据类型可以存储在c#中

时间:2011-02-13 23:22:15

标签: c#

我正在为我的任务编写一个小程序来查找素数的原始根。到目前为止,该程序适用于较小的素数,直到13,并给出正确的根数。但对于较高的素数,它只显示较少的原始根。而现在我被困在素数41,显示没有原始根源。我使用DOUBLE数据类型进行计算,并再次尝试使用数据类型DECIMAL,但没有运气。有谁知道这种问题???谢谢。

4 个答案:

答案 0 :(得分:4)

如果您正在尝试查找大整数,是否尝试过使用.NET 4中的BigInteger

请注意,在double中存储整数是一个坏主意 - 因为并非所有范围内的双精度都可以精确存储。 IIRC,decimal 可以总是准确地存储整数,但是你最多只能获得28或29位...而且它仍然是一个坏主意,因为你试图代表< EM>整数

另一方面,对于“坚持素数41”而言,你的意思并不是很清楚。你真的确定它是你所追求的大整数数据类型吗?

答案 1 :(得分:0)

这更可能是算法问题,而不是数据大小问题。你的算法永远不需要做多于两个小于你试图获得根的素数的值。不是直接将候选者提升到小于p的每个幂,然后取结果mod p,从1开始,然后重复乘以你正在测试的值,并在每一步之后取结果mod p 这意味着您永远不需要使用大于p * candidate的数字,并且只能使用int或long来处理相当大的数字。

答案 2 :(得分:0)

Primes总是整数,因此不需要使用double。如果计算在41处失败,则问题与您正在使用的数据类型的大小无关。您需要发布您正在使用的代码。

答案 3 :(得分:0)

WAY 回来的时候,我用C ++写了自己的素数。当时没有足够大的可用数据类型 - 您可能需要自己动手。如果你在比特,数字,字节和单词中长大,这很容易(嘿,作为一个,我是唯一一个记住当一个字节是累加器的宽度而不是8位的人吗?)...但是你的如果你对记忆及其用法没有很好的掌握,那么你自己也不会那么容易。

我知道这个令人讨厌的帖子,但如果您创建了自己的数据类型,那么您将学习很多关于计算机的工作原理。还有很多关于C#的事情,你覆盖了所有的运营商等等!