C# 生成系数为0或1且给定阶数为n的所有多项式
我试图在“C#”中列举所有给定度的可能多项式。是否有任何算法可以枚举给定n次的所有可能多项式?也许我不知道如何准确地问这个问题,但以下是一些例子: 例如: 对于n=1:C# 生成系数为0或1且给定阶数为n的所有多项式,c#,cryptography,algebra,polynomials,abstract-algebra,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] 对于n=3: x^3
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]
对于n=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]
任何伪代码或算法都会有所帮助 设置最左边的位,然后对右边的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;
}
}
}
}
你在找{x的⁰, xü,…,xⁿ}.我认为一个二进制计数器在右边的n-1位?@Ryan我认为,如果幂设置为开,假设n=2,我也会有[0 1 0],它是“x”,不是n的顺序=2@dana我认为你的观点是正确的,但我不能很好地理解它!你能详细说明一下吗?或者是一个伪代码?@Rebin:x^0…x^(n)的幂集− 1) 那么,每个结尾都有x^n。谢谢。让我来做。
foreach (int[] poly in GenPolys(4))
{
// your code here
}