我发现了一种在素向量上进行CRT的新方法。
给定素数列表P和一些残差R=mod(n,P),例如:
P=[2 3 5 7 11]R=[1 0 3 1 9]
此matlab函数将重建原始数字:
函数[crt]=crt_mendi_clean(R,P)%2019年,Mendi Barel版权所有。%例如:n=434,P=素数(13),R=mod(n,P),[crt]=crt_mendi_clean(R,P)crt=0;%初始crt首次出现滞后=1;%具有滞后的init primorials。[1 2 6 30 210...]对于i=1:长度(R)p=p(i);r=r(i);u=mod(crt,p);对于j=0:p-1,如果mod(primorilag*j,p)==u,ju=j;中断、结束、结束对于j=0:p-1,如果mod(primorilag*j,p)==r,jr=j;中断、结束、结束v=mod(jr-ju,p);crt=crt+primorilag*v;primorilag=primorirag*p;结束结束
例如:crt_mendi_clean([1 0 3 1 9],[2 3 5 7 11])
输出:603
唯一的限制是重建所需的明显限制:n<初级(P(结束))
.
这是一种新算法吗?还是已经知道了?