求助
题目描述判断一个数是否为对称且不大于五位数的素数。
意思是小于100,000的数
输入
第一行:测试数据组数T
接下来包含T行,每行由1个不大于五位数的正整数构成。
输出
对于每个正整数,如果该数是不大于五位数的对称素数,则输出”Yes”,否则输出”No”,每个判断结果单独列一行。 本帖最后由 isdkz 于 2023-3-31 21:13 编辑
import math
def is_prime(n):
if n%2 == 0:
return False
#只判断奇数,范围缩小一半
for i in range(3, int(n**0.5)+1, 2):
if n%i == 0:
return False
return True
def is_palindrome(n):
return str(n) == str(n)[::-1]
def main():
T = int(input())
for _ in range(T):
n = int(input())
if n <= 99999 and is_palindrome(n) and is_prime(n):
print("Yes")
else:
print("No")
if __name__ == "__main__":
main()
该程序首先定义了两个函数:is_prime() 和 is_palindrome(),分别用于检查给定的数是否为素数和回文数(对称数)。
程序的主要部分读取测试用例的数量(T),然后对于每个测试用例,读取一个数,检查它是否为回文数和素数,并相应地输出"Yes" 或 "No"。 本帖最后由 andy大宝 于 2023-4-1 18:24 编辑
#初始化
nums = []
iffound = []
tn = 2
T = int(input())
#输入T行数字
for i in range (T):
nums.append(str(input()))
#用for循环对每一个数字进行判断
for num in nums:
#判断对称
head = 0
tail = len(num)
while tail-head > 1:
if num != num: #首尾配对
iffound.append("No")
break
head += 1
tail -= 1
else: #while与else组成"干完了能怎样,干不完就别想怎样"的句式
#判断质数
itry = int(num)
while tn < itry // 2:
if itry % tn == 0:
iffound.append("No")
break
tn += 1
else:
if len(num) <= 5:
iffound.append("Yes")
else:
iffound.append("No")
#输出
for p in iffound:
print(p)
补充:
在while-else语句中,如果while被终止(break),则else后面的语句不会被执行
页:
[1]