题目转载:http://python.wzms.com/s/1/117
题目描述:
哥德巴赫猜想:对于任何大于或等于4的偶数n,存在至少一对素数p1和p2,使得n = p1 + p2。
这个猜想还没有被证实,也没有被拒绝。没有人确定这个猜想是否确实成立。然而,对于给定的偶数,可以找到这样一对素数(如果有的话)。这里的问题是编写一个程序,报告满足给定偶数的猜想中的条件的所有素数对的数目。
一个偶数序列作为输入。对应每个数字,程序应该输出上述对的数量。请注意,我们对基本上不同的对的数量感兴趣,因此不应该将(p1,p2)和(p2,p1)分别计数为两个不同的对。
输入格式:
在每个输入行中给出一个整数。你可以假定每个整数是偶数,大于或等于4且小于2 ^ 15。输入的结尾用数字0表示。
输出格式:
每个输出行应该包含一个整数。输出中不应出现其他字符。
代码:
# 输入偶数,将这些偶数加入到偶数列表中
even_number_list = []
for i in range(1000):even_number = int(input())if even_number == 0:breakelse:even_number_list.append(even_number)# 对于偶数列表中的每一个偶数,找出从2到这个偶数之间的素数,加入到素数列表中
for even_number_i in even_number_list:prime_number_list = [2]for number in range(3, even_number_i):# 判断number是不是素数,number从3开始for p in range(2, number):leap = 0if number % p == 0:leap = 1breakif leap == 0:prime_number_list.append(number)# 对于素数列表中的每一个素数,把偶数作为被减数,把素数作为减数
# 如果(被减数-减数)的差,也在素数列表中,那么减数和差就是一对素数pair_count = 0 # 用来记录一共有几对素数count = 0 # 用来记录减数和差相等的情况,比如10 - 5 = 5for subtractor in prime_number_list:difference = even_number_i - subtractor # 差 = 偶数 - 减数if difference in prime_number_list:pair_count += 1if subtractor == difference:count = 1if count == 0:print(int(pair_count/2))elif count == 1:print(int((pair_count+1)/2))
运行结果: