将Python aks素性测试转换为JavaScript
我正在编译以下Python代码:将Python aks素性测试转换为JavaScript,javascript,python,Javascript,Python,我正在编译以下Python代码: def expand_x_1(p): ex = [1] for i in range(p): ex.append(ex[-1] * -(p-i) / (i+1)) return ex[::-1] def aks_test(p): if p < 2: return False ex = expand_x_1(p) ex[0] += 1 return not any(mult % p fo
def expand_x_1(p):
ex = [1]
for i in range(p):
ex.append(ex[-1] * -(p-i) / (i+1))
return ex[::-1]
def aks_test(p):
if p < 2: return False
ex = expand_x_1(p)
ex[0] += 1
return not any(mult % p for mult in ex[0:-1])
for p in range(101):
if aks_test(p):
print(p)
谢谢 您的
any
的JavaScript实现将无法与数组一起工作。您最好使用(对于Python的all
)
因为我们没有生成器表达式,所以在JavaScript中,您可以
return ex.slice(0, -1).some(function(currentItem) {
currentItem % p;
});
我们需要修改数组,以便排除最后一个元素。首先,以与Python中相同的方式定义模函数:
函数模(a,b){
返回((a%b)+b)%b;
}
“notany”行实际上只是意味着如果模的所有迭代都没有得到0的结果,那么您希望返回true。你不能在JS中理解列表,但是你可以通过这样做得到同样的结果
//只需使用length-1而不是切片数组
对于(变量i=0;i
--编辑--
我只是为了更容易理解而对其进行了扩展,您可以使for循环更简单:
for(变量i=0;i
Hmm,即使我尝试了你的建议,我的脚本仍然无法正常工作。请注意,在JavaScript中,%
运算符不是真正的模运算。它只能像Python对正数那样工作。请参阅以帮助解决该问题。@jshanley我已尝试实施您的建议,但仍然无效…@Progo工作不正常,没有给我任何建议clues@Progo对不起,我不知道AKS测试算法HMI试图实现您的建议,但现在它的行为很奇怪:
return not any(mult % p for mult in ex[0:-1])
return ex.slice(0, -1).some(function(currentItem) {
currentItem % p;
});