在给定度n的情况下生成系数为0或1的所有多项式

时间:2017-03-01 02:21:01

标签: c# cryptography algebra polynomials abstract-algebra

我试图在'C#'中列举给出度数的所有可能的多项式。是否有任何算法可以枚举给定度n的所有可能的多项式?也许我不知道如何准确地提出这个问题,但这些都是例子

例如:

对于n = 1

x+1    return [1 1]
x      return [1 0]

表示n = 2

x^2+x+1  return [1 1 1]
x^2+x    return [1 1 0] 
x^2      return [1 0 0]
x^2+1    return [1 0 1] 

表示x = 3

x^3           return [1 0 0 0]
x^3+x^2       return [1 1 0 0]
x^3+x         return [1 0 1 0]
x^3+x^2+x     return [1 1 1 0]
x^3+1         return [1 0 0 1]
x^3+x^2+1     return [1 1 0 1]
x^3+x+1       return [1 0 1 1]
x^3+x^2+x+1   return [1 1 1 1]

任何伪代码或算法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

设置最左边的位,然后在右边的n位上做一个二进制计数器。你实际上需要n + 1位来解释x ^ 0,(在我的第一次尝试中,我被1关闭了。)

您可以生成如下枚举:

IEnumerable<int[]> GenPolys(int n)
{
    int[] a = new int[n + 1];
    a[0] = 1;
    bool ok = true;
    while (ok)
    {
        yield return a;
        ok = false;
        for (int i = 1; i < a.Length; i++)
        {
            a[i] = 1 - a[i]; // flip the ith bit
            if (a[i] == 1)
            {
                ok = true;
                break;
            }
        }
    }
}

用法:

foreach (int[] poly in GenPolys(4))
{
    // your code here
}