题目描述
若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
输入:
有一个正偶数 n ,表示待挑选的自然数的个数。后面给出 n 个具体的数字。
输出:
输出一个整数 K ,表示你求得的“最佳方案”组成“素数伴侣”的对数。
数据范围: 1≤n≤1001≤n≤1001≤n≤100 ,输入的数据大小满足2≤val≤300002≤val≤300002≤val≤30000
输入描述
1 输入一个正偶数 n
2 输入 n 个整数
输出描述
求得的“最佳方案”组成“素数伴侣”的对数。
代码
递归法 4/24
OJ提交超时,本地IDE运行答案正确。思路如下:
1、定义判断是否为素数的函数
2、定义计算素数伴侣数量的递归函数
3、两层循环遍历全排列。每次从输入数据中提出两个数据,若是素数伴侣,则数量ans+1,继续执行函数。当只剩下两个数的时候,判断是否为素数伴侣后退出递归。列表res记录所有组合的素数伴侣数量,取出最大值
N=int(input())
L=list(map(int,input().split()))
# 判断是否为素数
def is_prime(n):
if n==2:
return 1
elif n==1:
return 0
for i in range(2,int(n**0.5)+1):
if n%i==0:
return 0
return 1
# 在数字列表number中找出素数伴侣的组合
res=[]
def f(number,ans):
N=len(number)
#print(number,N)
if N==2:
if is_prime(number[0]+number

文章讨论了一个关于素数伴侣的概念,即两个正整数之和为素数的组合。针对给定的一组正整数,任务是找出能形成最多素数伴侣对的最佳方案。作者提出了使用递归的方法来遍历所有可能的组合,但这种方法在处理大数据时会超时。随后进行了两次优化,首先是基于奇偶性分组减少计算量,然后是通过贪心策略删除最小配对以减少递归深度。尽管有所改进,但在某些测试用例中仍存在超时问题。

778

被折叠的 条评论
为什么被折叠?



