BigInteger的模数运算返回0

时间:2014-03-13 22:21:50

标签: c# math biginteger

我正在尝试使用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,无论我将它分解为哪种方式,即每行执行一次操作。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

您提供以下数据样本:

possibleColours: 65536,  
i: 20

您在此处增加sizes

sizes *= possibleColours;

所以你已经进行了第二次迭代(应用提供的样本数据):

                    i   sizes   possibleColours
BigInteger index = (20/65536) % 65536;

20/65536 == 0integers的位置相同,因此划分的结果也是integer本身。

我们得到:

BigInteger index = 0 % 65536;,所以index==0

这意味着在第一次迭代后,您将始终获得0,这是您实际体验到的。

答案 1 :(得分:2)

isizes都是BigInteger。因此,只要sizes>i(i/sizes)==0,因为它是整数除法。这可能是问题所在。