题解 | #素数伴侣#
素数伴侣
https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
n=int(input())
num=list(map(int,input().split()))
def isprime(a,b):#判断相加是否为素数
sum=a+b
if sum<2:
return False
elif sum<4:
return True
elif sum%2==0 or sum%3==0:
return False
i=5
while i*i<sum:
if sum%i==0 or sum%(i+2)==0:
return False
i+=6
return True
#获得二维矩阵a[i][j],i,j代表第几个数,对应矩阵内元素全为1或0,1表示相加为素数
a=[]
for i in num:
b=[]
for j in num:
if isprime(i,j):
b.append(1)
else:
b.append(0)
a.append(b)
#第i个数是否能找到对应parter相加为素数
def find(a,i,parter,seen):
for j in range(len(a)):
if a[i][j] and not seen[j]:
seen[j]=True #是否访问过该数,防止重复访问陷入循环
if parter[j]==-1 or find(a,parter[j],parter,seen):
parter[j]=i
parter[i]=j
return True
return False
parter=[-1]*len(a)
count=0
for i in range(len(a)):
seen=[False]*len(a)
if parter[i]==-1:
if find(a,i,parter,seen):
count+=1
print(count)
查看15道真题和解析