Run ID:160667

提交时间:2026-09-26 09:46:39

import math def is_prime(num): """ 判断一个数是否为素数 优化点:只需检查到 sqrt(num),并排除偶数 """ if num < 2: return False if num == 2: return True if num % 2 == 0: return False # 只检查奇数因子,从3开始到sqrt(num) for i in range(3, int(math.sqrt(num)) + 1, 2): if num % i == 0: return False return True def reverse_number(num): """ 返回一个整数的反序数 例如: 123 -> 321, 100 -> 1 """ return int(str(num)[::-1]) def find_absolute_primes(m, n): """ 找出 m 到 n 之间(包含m和n)的所有绝对素数 """ absolute_primes = [] # 确保遍历范围有效 start = min(m, n) end = max(m, n) for num in range(start, end + 1): # 1. 首先判断原数是否为素数 if is_prime(num): # 2. 计算反序数 rev_num = reverse_number(num) # 3. 判断反序数是否也为素数 # 注意:如果原数是素数,但反序后变成合数(如19->91),则不是绝对素数 if is_prime(rev_num): absolute_primes.append(num) return absolute_primes # --- 主程序入口 --- if __name__ == "__main__": try: # 获取用户输入 m = int(input("请输入起始正整数 M: ")) n = int(input("请输入终止正整数 N: ")) if m < 1 or n < 1: print("请输入正整数。") else: # 查找绝对素数 result = find_absolute_primes(m, n) # 输出结果 if result: print(f"{min(m,n)} 到 {max(m,n)} 之间的绝对素数有:") # 每行打印5个,美观输出 for i, p in enumerate(result): print(p, end="\t") if (i + 1) % 5 == 0: print() # 换行 print() # 最后补一个换行 print(f"共找到 {len(result)} 个绝对素数。") else: print("该范围内没有绝对素数。") except ValueError: print("输入无效,请输入整数。")