【发布时间】:2020-06-27 04:42:19
【问题描述】:
考虑以下脚本:
Python
def f(a, b, n):
return (n ** 2) + (a * n) + b
def prime_check(num):
for i in range(2, (num // 2) + 1):
if num % i == 0:
return False
return True
num_primes = []
coefficients = []
for a in range(-999, 1000, 1):
for b in range(-1000, 1001, 1):
n = 0
coefficients.append((a, b))
while True:
result = prime_check(f(a, b, n))
if result:
n += 1
continue
else:
num_primes.append(n - 1)
break
print(f"num_primes: {num_primes[-1]} coefficients: {coefficients[-1]}")
上面的算法是用来搜索 |a| 的值。
此时,n - 1 被附加到 num_primes 以反映这组系数 (a, b) 对 n 的连续值产生的素数的数量。
当我运行此代码时,内部 for 循环末尾的打印语句显示 num_primes 值在当前迭代的 b 值和 0 之间交替出现,而不是系数的正确素数数量。
我不确定我哪里出错了。
【问题讨论】:
-
在
if result:之前尝试print(f"a={a} b={b} n={n} f()={f(a,b,n)} isprime={result}") -
f(a, b, n)经常给出负数。负数的prime_check(num)总是返回True,因为for i in range(2, negative_number)中的循环在没有进入循环的情况下停止。 -
@JohanC 是的,非常感谢