Matlab 模k多项式的Gcd
我想让Matlab告诉我,例如,在像Z_3[x](其中答案是x+1)和Z_5[x](其中答案是x^2-x+2)这样的域上,x^4+x^3+2x+2和x^3+x^2+x+1的多项式的最大公因式Matlab 模k多项式的Gcd,matlab,algebra,polynomials,finite-field,Matlab,Algebra,Polynomials,Finite Field,我想让Matlab告诉我,例如,在像Z_3[x](其中答案是x+1)和Z_5[x](其中答案是x^2-x+2)这样的域上,x^4+x^3+2x+2和x^3+x^2+x+1的多项式的最大公因式 有什么想法可以实现吗?这里是一个简单的实现。多项式从最低阶开始编码为系数数组:因此,x^4+x^3+2x+2是[2 2 0 1]。该函数采用两个多项式p、q和模k(对于算法的工作性质而言,这应该是素数) 示例: gcdpolyff([22001],[1111],3)返回[11]表示1+x gcdpolyf
有什么想法可以实现吗?这里是一个简单的实现。多项式从最低阶开始编码为系数数组:因此,x^4+x^3+2x+2是
[2 2 0 1]
。该函数采用两个多项式p、q和模k(对于算法的工作性质而言,这应该是素数)
示例:
返回gcdpolyff([22001],[1111],3)
表示1+x[11]
返回gcdpolyff([22001],[1111],5)
表示1+3x+2x^2;这与你的答案不一致,但我亲自检查了一下,似乎你的答案是错的[1232]
function g = gcdpolyff(p, q, k)
p = [p, zeros(1, numel(q)-numel(p))];
q = [q, zeros(1, numel(p)-numel(q))];
while nnz(mod(p-q,k))>0
dp = find(p,1,'last');
dq = find(q,1,'last');
if (dp>=dq)
p(dp-dq+1:dp) = mod(p(1+dp-dq:dp) - q(1:dq), k);
else
q(dq-dp+1:dq) = mod(q(dq-dp+1:dq) - p(1:dp), k);
end
end
g = p(1:find(p,1,'last'));
end
变量dp和dq的名称有点误导:它们不是p和q的度数,而是度数+1 您是希望自己实际实现一个算法,还是可以使用这样的现有实现@它说你不能在matlab中使用它?我不想实现我自己的算法,我只是想为我计算一下。(我尝试了wolfram alpha,但每个答案都是1!)(实际上,用户错误可能是它是1的原因,但我仍然希望有一种使用matlab计算的方法)应该没有那么困难: