描述伟大的哥德巴赫猜想事:任何一个大于 6 的偶数总可以分解为两个素数之和。现在请你编程验证哥德巴赫猜想即输入一个大于 6 的偶数 n 将其分解为两个素数之和输出。如果有多种分解答案请输出字典序最小的那一个。输入描述一行一个正整数 n 。输出描述一行一个表达式表示字典序最小的一种分解方法具体格式参见样例。用例输入 1 6用例输出 1 6=3+3用例输入 2 14用例输出 2 14=3+11
思路:
- 首先定义一个函数 is_prime(n) 来判断一个数是否为素数,如果是素数则返回 True,否则返回 False。
- 对于给定的偶数 n,从 2 开始遍历到 n//2,依次判断每个数 i 是否为素数。
- 如果 i 是素数,那么判断 n-i 是否也是素数,如果是素数则找到了一种分解方法,输出结果并结束程序。
- 如果遍历完所有的数都没有找到满足条件的分解方法,则输出 "No solution"。
时间复杂度分析:假设 n 是给定的偶数,那么在最坏情况下,需要遍历 n//2 个数来判断是否为素数,所以时间复杂度为 O(n)。
实现代码如下:
def is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True
n = int(input())
for i in range(2, n // 2 + 1): if is_prime(i) and is_prime(n - i): print(f"{n}={i}+{n-i}") break else: print("No solution"
原文地址: http://www.cveoy.top/t/topic/iNsR 著作权归作者所有。请勿转载和采集!