双十一CF必上1400


私信TA

用户名:dotcpp0602879

访问量:4061

签 名:

放纵是本性,克制是智慧。

等  级
排  名 408
经  验 5035
参赛次数 3
文章发表 22
年  龄 21
在职情况 学生
学  校 江南大学
专  业 软件工程

  自我简介:

蓝桥国一终归与我!

解题思路:

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

4 人评分

  评论区

  • «
  • »