如何只打印此输出的最后一行?

How to print only the last line of this output?

我需要找到 10000 以下的最长非素数行。

如何只打印输出中的最后一行? 没有 max 函数,也没有简单的数值约束。

我认为它只需要一些小的调整,只是不知道在哪里或如何。

priemen = []
for x in range(2,10000):    #prime generator
    tel = 0
    for deler in range(1,x):
        if x % deler == 0:
            tel += x % deler == 0
    if tel <2:
        priemen.append(x)   

a = priemen[0]
b = priemen[1]
maxrow = 0

for next in priemen[2:]:    
    a = b
    b = next
    row = b - a - 1       
    
    if row > maxrow:
        maxrow = row
        print("The longest row starts at", a+1, "and stops at", b-1, "and is", maxrow, "long.")

------------------
Output: 
The longest row starts at 8 and stops at 10 and is 3 long.
The longest row starts at 24 and stops at 28 and is 5 long.
The longest row starts at 90 and stops at 96 and is 7 long.
The longest row starts at 114 and stops at 126 and is 13 long.
The longest row starts at 524 and stops at 540 and is 17 long.
The longest row starts at 888 and stops at 906 and is 19 long.
The longest row starts at 1130 and stops at 1150 and is 21 long.
The longest row starts at 1328 and stops at 1360 and is 33 long.
The longest row starts at 9552 and stops at 9586 and is 35 long.

我只需要打印最后一个

谢谢!!

您需要将ab的值保存到单独的变量中,以便您可以在循环后打印它们。

b = priemen[1]
maxrow = 0

for n in priemen[2:]:
    a = b
    b = n
    row = b - a - 1       
    
    if row > maxrow:
        maxrow = row
        a_max = a
        b_max = b

if maxrow != 0:
    print("The longest row starts at", a_max + 1, "and stops at", b_max - 1, "and is", maxrow, "long.")

其他注意事项:

  • 我还没有初始化 a_maxb_max - 但最后的 if 测试是为了防止它们尚未设置的任何情况
  • 我已将 next 重命名为 n,因为 next 是内置函数的名称
  • a = priemen[0] 行没有意义,所以我删除了它

我发现此代码效率低下且存在问题。首先,它测试从 1 到 x

的除数是低效的
for deler in range(1, x):

当只需要测试个约数(处理偶数后)从3到平方根 15=]。但即使这样也是低效的,因为它正在创建一个素数列表,它可以用作除数来加快速度!最后,efficiency-wise,相信可以一次搞定:

TARGET = 10_000  # below this number

primes = [2]

start = end = primes[-1]

for number in range(3, TARGET, 2):

    def is_prime(number):
        for divisor in primes:
            if divisor * divisor > number:
                return True

            if number % divisor == 0:
                return False

        return True

    if is_prime(number):
        primes.append(number)

        if primes[-1] - primes[-2] > end - start:
            start, end = primes[-2:]

print("The longest run starts at", start + 1, "and stops at", end - 1, "and is", end - start - 1, "long.\n")

最后,问题未明确,解决方案可能错误,就目标而言。考虑目标为 9586 而不是 10000。编写的代码将打印:

The longest run starts at 1328 and stops at 1360 and is 33 long.

但是通过在主循环后添加如下代码:

if TARGET - primes[-1] > end - start:
    start, end = primes[-1], TARGET

我们得到正确答案:

The longest run starts at 9552 and stops at 9585 and is 34 long.

如果目标更大,运行会更长,但它仍然是最长的运行。