我这个遇到数字过大的,肯定要超时了,不过算法应该是对的
def isss(n):
tmp=[]#定义一个临时数组
for i in range(1,1+n):
if n%i==0:
tmp.append(i)
if len(tmp)==2:#只有1和自身,说明是素数,lenth只有2
return n
else:
return None
while True:
try:
n=int(input())
tmp=[]#专门用来装素数
for i in range(1,1+n):
if isss(i)==None:
continue
else:
tmp.append(isss(i))
tmp.append(1)#这个算法不会把1算进来,所以我自己加了
#print(tmp)#测试用
tmpsh=[]#定义一个满足素数和的条件
for i in tmp:
for j in tmp:
if i+j==n:#如果两个素数相加等于n,那么就满足条件
tmpsh.append([i,j])
#print(tmpsh)#测试用
zxz=n#设置一个最小值为n,相差值肯定不会超过n
a=0
b=0
for i in tmpsh:
if abs(i[0]-i[1])<zxz:#如果绝对值小于最小值
zxz=abs(i[0]-i[1])
a=i[0]
b=i[1]
else:#否则继续
continue
if a<=b:#最终判定下大小,进行输出。
print(a)
print(b)
else:
print(b)
print(a)
except:
break
还是大佬的代码更简洁啊
def isPrime(num):#定义一个素数判断函数
for i in range(2,int(pow(num,0.5))+1):
if num%i==0:
return False
else:
pass
return True
while True:
try:
n=int(input())
for i in range(2,n//2+1):#截断整数部分
if isPrime(i)and isPrime(n-i):#从两端开始逼近
a,b=i,n-i
print(a);print(b)
except:
break