PAT乙级_1114 全素日_Python_AC解法_含疑难点
注意事项:
因为笔者的编程水平以自学为主,代码结构可能比较混乱、变量命名可能不够规范。
文章中的AC解法不一定最优,并且包含笔者强烈的个人风格,不喜勿喷,但欢迎在评论中理性讨论或者给出提升建议。
文章中提到的疑难点仅为个人在刷题过程中所遇到的情况,如有读者存在其他疑难点,欢迎在评论中加以补充,笔者会尽量将其加入到文章内容中。
合集:
PAT乙级_合集_Python_AC解法
题目:
1114 全素日
题目描述:
以上图片来自新浪微博,展示了一个非常酷的“全素日”:2019年5月23日。即不仅20190523
本身是个素数,它的任何以末尾数字3
结尾的子串都是素数。
本题就请你写个程序判断一个给定日期是否是“全素日”。
输入格式:
输入按照 yyyymmdd
的格式给出一个日期。题目保证日期在0001年1月1日到9999年12月31日之间。
输出格式:
从原始日期开始,按照子串长度递减的顺序,每行首先输出一个子串和一个空格,然后输出 Yes
,如果该子串对应的数字是一个素数,否则输出 No
。如果这个日期是一个全素日,则在最后一行输出 All Prime!
。
输入样例1:
20190523
输出样例1:
20190523 Yes
0190523 Yes
190523 Yes
90523 Yes
0523 Yes
523 Yes
23 Yes
3 Yes
All Prime!
输入样例2:
20191231
输出样例2:
20191231 Yes
0191231 Yes
191231 Yes
91231 No
1231 Yes
231 No
31 Yes
1 No
代码限制:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
AC解法:
# 构造函数用于素数判断
def prime(num): # 设置输入参数 numif num < 2: # 若 num 小于 2return False # 返回 Falsefor n in range(2, int(num ** 0.5) + 1): # 遍历 num 可能存在的因数if num % n == 0: # 若 num 对该因数取余的结果为 0 ,即 num 不是素数return False # 返回 Falsereturn True # 返回 True# 获取输入的数据
date = input() # 获取输入的日期# 处理数据并输出结果
flag = True # 创建变量用于标记错误情况,初始值为 True
for i in range(8): # 遍历起始位置if prime(int(date[i:])): # 若该位置起至尾部的数字是素数print(f"{date[i:]} Yes") # 按格式要求输出对应的结果else: # 该位置起至尾部的数字不是素数print(f"{date[i:]} No") # 按格式要求输出对应的结果flag = False # 标记更新为 False
if flag: # 若标记值为 True,即该日期是一个全素日print('All Prime!') # 输出结果
题目解读:
本题描述比较易懂。
先获取输入的数据,再逐步去除头部数字并进行素数判断,同时也逐行输出对应情况,最后根据是否为全素日的情况并输出对应的结果。
疑难点:
其他注意事项
1、
需要保留数字的前导零。