对于给定的数字X,最有效的计算其 质数 因子乘积的方法是什么? 是否有一种可以不实际进行因式分解的方法来完成此操作? 注意-所需为质数因子的乘积(所有质数的幂次都为1)。
对于给定的数字X,最有效的计算其 质数 因子乘积的方法是什么? 是否有一种可以不实际进行因式分解的方法来完成此操作? 注意-所需为质数因子的乘积(所有质数的幂次都为1)。
Maple和Mathematica都通过因数分解并将每个质数的一个副本乘回来来计算一个数字的无平方因子核(参见https://oeis.org/A007947),因此我怀疑是否已知有更好的方法。
method removeHigherPrimePowers(number)
temp <- number
primes <- [2, 3, 5, 7 ...]
for each p in primes
factor <- p * p // factor = 4, 9, 25, ...
while (temp MOD factor = 0)
temp <- temp / p // Remove extra factor of p
endwhile
endfor
return temp
endmethod
正在对数字进行因式分解,但是因式分解有些隐蔽。所有这些MOD
语句都执行相同的工作。所保存的只是一定量的账目,跟踪到目前为止找到的因子并在最后将它们全部相乘。
正如Peter所说,您可以测试所有小于立方根的质数,然后检查剩余的数字是否为平方数。
temp MOD factor != 0
时,while循环退出。temp
的值在每次循环中更改,即temp <- temp / p
。在某个时刻,循环将会退出。 - rossumprimes
列表的大小可以根据输入测试数字X的值范围进行设置,该值未在问题中指定。我出于这个原因而保持了开放状态。 - rossum
return X;
... - Oliver Charlesworthn
的质因数p
的乘积product(p)
似乎在计算上等效于计算欧拉函数product(p-1)
。我已经编写了程序来执行此操作,它们都需要以某种方式对n
进行因式分解。事实上,RSA加密方案的强度依赖于Totient(n)
与n
的因式分解同样难以计算。 - RBarryYoung