【问题标题】:Variable not properly updating when searching for consecutive primes搜索连续素数时变量未正确更新
【发布时间】: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 是的,非常感谢

标签: python algorithm math


【解决方案1】:

正如@JohanC 所指出的,当prime_check(num) 被赋予一个负数时,无论该数字是什么,它都会返回True。

解决此问题的方法是对prime_check(num) 进行简单更改,如下所示。

Python

def prime_check(num):
    for i in range(2, (abs(num) // 2) + 1):
        if num % i == 0:
            return False
    return True

通过在除法之前计算abs(num),我们消除了num

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2021-07-27
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多