MOOC作业练习8

验证哥德巴赫猜想之一:2000 以内的正偶数(大于等于 4)都能够分解为两个质数之 和。每个偶数表达成形如:4=2+2 的形式。


ast = [i for i in range(4,2001,2)]	# 把所有大于4的偶数做成列表
bst = []
for i in range(2,2000):				# 找出2000内所有的素数
    k = int(i**0.5)
    flag = 1
    for j in range(2,k+1):
        if i % j ==0:
            flag = 0
            break
    if flag:
        bst.append(i)

count = 0
for i in ast:						# 如果偶数-质数的差在质数的列表里,则count + 1,并终止当前循环计算下一个偶数
    for j in bst:
        if (i - j) in bst:
            count+=1
            break  
if len(ast) == count:				# 如果数目是相等的,则命题正确
	print('命题正确')

我误解题意了,题意是给一个正偶数 ,找出和是这个数的两个质数。

import math

def prime(x):
    if x==1:
        return False
    n = int(math.sqrt(x))
    for i in range(2,n+1):
        if x % i ==0:
            return False
    return True

def GC(n):
    k = 3
    while k < n:
        t = n - k
        if t < k:
            break
        if prime(k) and prime(t):
            return k,t
        k += 2
        
n = int(input())
if n >4:
    a,b = GC(n)
    print("{}={}+{}".format(n,a,b))
elif n ==4:
    print("{}={}+{}".format(4,2,2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值