解题思路:
将问题差分成先求1~n的所有素数 再累加素数判断是否符合题意
注意事项:
首先眼光不能局限在本题目10**4案例上,当然时间复杂度N**2也可以写出来,希望大家可以将算法完善.
关于求解一个数是不是素数是有一套模板的(自己写的哈哈哈哈) 大家可以直接套用 比赛时减少时间
参考代码:
from math import *
# 求素数的模板直接套用 根据返回的列表是1和它本身就是素数
def func1(m):
list1=[]
for i in range(1,int(sqrt(m))+2):#减少查找 后面有整除不需要全部都检索(+2是因为确保所有数都可以记录当然你可以+3+4都可以啦)
if m%i==0:
aa=m//i#添加因数
list1.append(aa)
list1.append(i)
list2=list(set(list1))
list2.sort()
return list2
even=eval(input())
list4=[]#存放所有素数
for w in range(2,even+1):#1不是素数 从2开始
if func1(w)==[1,w]:# 判断是不是素数
list4.append(w)
#方法 时间复杂度n
result1=0#累加答案
for x in range(len(list4)):
y=even-list4[x]#满足条件的数
if y in list4:#判断有没有
if list4[x]<=y:# 更要判断是否重复出现 原来的数组是从小到大排列 小+大合理 但是大+小就重复了 你们觉得呢
result1+=1
else:
break#一旦出现重复是不是就可以判断 后面都是重复的数了 直接跳出循环 减少时间
print(result1)
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复