pta判断素数运行超时,如何解决?(语言-python)

M = int(input())
flag=1
if M == 2:
    print("Yes")
elif M <= 0:
    print("No")
elif M == 1:
    print("No")
else:
    for i in range(2, M):
        if M % i == 0:
            flag=0
            break
    if flag==1:
        print("Yes")
    else:
        print("No")

基于Monster 组和GPT的调写:
剪枝优化:

import math

M = int(input())
flag = 1
if M == 2:
    print("Yes")
elif M <= 0 or M == 1:
    print("No")
else:
    for i in range(2, int(math.sqrt(M)) + 1):
        if M % i == 0:
            flag = 0
            break
    if flag == 1:
        print("Yes")
    else:
        print("No")


用质数筛选法的优化

import math

# 构建素数表
MAXN = 1000000
is_prime = [True] * (MAXN + 1)
is_prime[0], is_prime[1] = False, False
for i in range(2, int(math.sqrt(MAXN)) + 1):
    if is_prime[i]:
        for j in range(i * i, MAXN + 1, i):
            is_prime[j] = False

M = int(input())
if M < 2 or not is_prime[M]:
    print("No")
else:
    print("Yes")


你的M最大到多大?
稍微超时一点
for i in range(2, sqrt(M)):
这里判断到根号下M即可

如果超时很多,你得用筛法等更高效的算法

顺便说下,这种flag的写法,是C语言带来的,python有更优雅的实现,for ... else

  • 建议你看下这篇博客👉 :Python编程PTA题解——求整数段和
  • 除此之外, 这篇博客: PTA-python-逆序输出中的 解决思路: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 第一个输出要求逆序i输出所有元素,要清除空格,我的思路是先将得到的字符串转为列表再使用reverse函数,再转化为无间隔字符串输出。

    x_list=s.split()			#s是input得到的字符串
    x_list.reverse()
    x2_list=''.join(x_list)
    print(x2_list)
    

    第二个输出要求输出原列表,那么直接将刚才得到的列表化的字符串输出便可。

    print(x_list)
    

    第三个输出要求逆序输出原列表每个元素,中间以1个空格分隔。
    则将得到的逆序的列表转化为字符串,元素间用空格(’ ')隔开。

    s_list.reverse()
    s2_list=' '.join(s_list)
    

    且最后一个元素后面不可带有空格。
    则使用rstrip函数再输出:
    rstrip函数在Python中用以删除 string 字符串末尾的指定字符(默认为空格)

    s2_list.rstrip()
    print(s2_list)
    

    最终的得到整体的代码:

    s=input()
    x_list=s.split()
    x_list.reverse()
    x2_list=''.join(x_list)
    print(x2_list)
    print(x_list)
    s_list.reverse()
    s2_list=' '.join(s_list)
    s2_list.rstrip()
    print(s2_list)