解题思路:

将问题差分成先求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.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论