我正在尝试使用C#中的2个BigIntegers计算模数。
以下是有问题的方法:
static List<int> Get(BigInteger possibleColours, BigInteger length, BigInteger i)
{
List<int> ret = new List<int>();
BigInteger sizes = 1;
for (int j = 0; j < length; j++)
{
BigInteger index = (i/sizes) % possibleColours;
ret.Add((int)index);
sizes *= possibleColours;
}
return ret;
}
这一行是问题所在:
BigInteger index = (i/sizes) % possibleColours;
除法运算似乎运行正常,但模数似乎总是将索引设置为0,无论我将它分解为哪种方式,即每行执行一次操作。
任何帮助将不胜感激!
答案 0 :(得分:4)
您提供以下数据样本:
possibleColours: 65536,
i: 20
您在此处增加sizes
:
sizes *= possibleColours;
所以你已经进行了第二次迭代(应用提供的样本数据):
i sizes possibleColours
BigInteger index = (20/65536) % 65536;
20/65536 == 0
与integers
的位置相同,因此划分的结果也是integer
本身。
我们得到:
BigInteger index = 0 % 65536;
,所以index==0
。
这意味着在第一次迭代后,您将始终获得0
,这是您实际体验到的。
答案 1 :(得分:2)
i
和sizes
都是BigInteger。因此,只要sizes>i
,(i/sizes)==0
,因为它是整数除法。这可能是问题所在。