将Python aks素性测试转换为JavaScript

将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

我正在编译以下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 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;
});