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

问题描述

我需要找到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到x平方根奇数除数(在处理偶数之后)。但是,考虑到事实是它创建了一个质数列表,可以将其用作除数来进一步加快运算速度,因此即使这样也将是无效的!最后,从效率角度来看,我相信可以一次完成:

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,end - 1,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.

如果目标较大,则运行时间会更长,但仍是最长的运行时间。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...