C# c中可以存储的最大值数据类型#

C# c中可以存储的最大值数据类型#,c#,C#,我正在为我的作业写一个小程序来寻找素数的本原根。到目前为止,该程序适用于小素数,直到13,并给出正确的根数。但对于更高的素数,它只显示更少的本原根。现在我被质数41卡住了,它没有原始根。我使用DOUBLE数据类型进行计算,并再次尝试使用数据类型DECIMAL,但没有成功。有人知道这种问题吗???谢谢。如果您试图查找大整数,您是否尝试过使用.NET 4 请注意,在double中存储整数是一个坏主意,因为并非其范围内的每个double都可以准确存储。IIRC,decimal始终可以精确存储整数,但最

我正在为我的作业写一个小程序来寻找素数的本原根。到目前为止,该程序适用于小素数,直到13,并给出正确的根数。但对于更高的素数,它只显示更少的本原根。现在我被质数41卡住了,它没有原始根。我使用DOUBLE数据类型进行计算,并再次尝试使用数据类型DECIMAL,但没有成功。有人知道这种问题吗???谢谢。

如果您试图查找大整数,您是否尝试过使用.NET 4

请注意,在
double
中存储整数是一个坏主意,因为并非其范围内的每个double都可以准确存储。IIRC,
decimal
始终可以精确存储整数,但最多只能存储28或29位。。。从根本上说,这仍然是一个坏主意,因为你试图表示整数


另一方面,不太清楚你所说的“被质数41卡住”是什么意思。您真的确定要查找的是大整数数据类型吗?

如果要查找大整数,是否尝试使用.NET 4

请注意,在
double
中存储整数是一个坏主意,因为并非其范围内的每个double都可以准确存储。IIRC,
decimal
始终可以精确存储整数,但最多只能存储28或29位。。。从根本上说,这仍然是一个坏主意,因为你试图表示整数


另一方面,不太清楚你所说的“被质数41卡住”是什么意思。你真的确定你要找的是大整数数据类型吗?

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

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

素数总是整数,所以不需要使用双精度。如果您的计算在41失败,那么问题与您使用的数据类型的大小无关。您需要发布正在使用的代码。

素数始终是整数,因此不需要使用双精度。如果您的计算在41失败,那么问题与您使用的数据类型的大小无关。你需要张贴你正在使用的代码。

回去,我在C++中写了自己的素数。当时没有一种可用的数据类型足够大—您可能需要修改自己的数据类型。如果你从小就有比特、Nybles、字节和单词,这很容易(嘿,顺便说一句,我是唯一一个记得什么时候字节是acumulator的宽度而不是8比特的人吗?)。。。但是,如果你不能很好地掌握内存及其使用方法,那么自己动手就不会那么容易了

我知道,但如果你创建自己的数据类型,你会学到很多关于计算机如何工作的知识。关于C#也有很多,你覆盖了所有操作符等等
我知道,但如果你创建自己的数据类型,你会学到很多关于计算机如何工作的知识。关于C#也有很多,你覆盖了所有操作符等等

您应该使用int或long,素数总是一个整数(根据定义)。我怀疑逻辑上有错误,因为数字41的失败肯定不是由于数据类型的大小,你介意同时发布示例代码吗?除非发布代码,否则无法诊断实际问题。@Crimsonland:如果他发布了一些示例代码,那么他的老师可能会发现其他人做了他的作业:)是无论如何,我可以使用log?你应该使用int或long,素数总是一个整数(根据定义)。我怀疑逻辑上有错误,因为数字41的失败肯定不是由于数据类型的大小,你介意同时发布示例代码吗?除非发布代码,否则无法诊断实际问题。@Crimsonland:如果他发布了一些示例代码,那么他的老师可能会发现其他人做了他的作业:)是我可以用log吗?我需要用5位数的素数。你能给我一些建议吗,我该如何计算这个的模数。用long。这将很容易处理两个五位数的数字相乘。C#中的模运算符是
%
。我需要使用5位素数。你能给我一些建议吗,我该如何计算这个的模数。用long。这将很容易处理两个五位数的数字相乘的问题