冬雪雪冬 发表于 2017-10-2 17:19:41

Python:每日一题 109

本帖最后由 冬雪雪冬 于 2017-10-2 21:24 编辑

首先我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 为了让大家独立思考,跟帖改为“回帖仅作者可见”。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
我们知道质数(素数)是2,3,5,7,11,13,17......
前n个质数相加,有可能也是质数,例如2+3=5,2+3+5+7=17
要求列出1000以内,能由从2开始的前n个质数相加得到的质数列表。

solomonxian 发表于 2017-10-2 19:14:44

是前任意个相加,没理解错吧,
筛出质数,累加,求交集
from itertools import accumulate

def fun(n):
    prime = ]
    acc_prime = set(accumulate(prime)) - {2} # 2 作为累加第一项多余
    return set(prime) & acc_prime

bush牛 发表于 2017-10-2 20:31:49


def primefactor(n):
    lst =
    nlst = []
   
    for i in range(2,len(lst)):
      if sum(lst[:i]) > lst[-1]:
            if is_prime(sum(lst[:i])):
                nlst.append(sum(lst[:i]))
      elif sum(lst[:i]) in lst:
            nlst.append((sum(lst[:i])))

    return nlst

def is_prime(n):
    for i in range(2, n):
      if n % i == 0:
            return False
    return True

bush牛 发表于 2017-10-2 20:42:15

solomonxian 发表于 2017-10-2 19:14
是前任意个相加,没理解错吧,
筛出质数,累加,求交集

又看了一遍题,发现和你理解有点区别。。貌似你理解的对的。。尴尬

solomonxian 发表于 2017-10-2 21:21:21

bush牛 发表于 2017-10-2 20:42
又看了一遍题,发现和你理解有点区别。。貌似你理解的对的。。尴尬

审题,敲黑板,划重点{:9_217:}

冬雪雪冬 发表于 2017-10-2 21:23:29

solomonxian 发表于 2017-10-2 19:14
是前任意个相加,没理解错吧,
筛出质数,累加,求交集

我可能没有写清楚,每次都是从2开始加。

堕落之翼 发表于 2017-10-2 22:02:37

def fun(n):
    new_prime = []
    prime = ]
    for i in range(1,len(prime)):
      if sum(prime[:i+1]) in prime:
            new_prime.append(sum(prime[:i+1]))
    return new_prime
print(fun(1000))

sige 发表于 2017-10-3 12:21:37

#质数求和仍然为质数
#求出1-1000的质数
list1 =
sign = 0
for i in range(2,1000):
    for j in range(2,i//2 + 1):
      if i % j != 0:
            sign = 1
      else:
            sign = 0
            break
    if sign == 1:
      list1.append(i)
#print(list1)
#求出质数加和还为质数
length = len(list1)
sum = 0
list2 = []
for i in range(length):
    sum = sum + list1
    if sum > 1000:
      break
    elif (sum in list1):
      list2.append(sum)

print(list2)
运行结果:

Teagle 发表于 2017-10-5 19:49:24

from itertools import accumulate

def primefactor(itertor):
    return (i for i in itertor if 0 not in (i%j for j in range(2,int(i**0.5+1))))
def main(n):
    return list(primefactor(accumulate(primefactor(range(2,1000)[:n]))))
if __name__ == "__main__":
    print(main(1000))


{:5_92:}{:5_92:}
借鉴了一下 solomonxian 大佬的accumulate函数

qwc3000 发表于 2017-10-6 09:56:35

zhengshu=1000
prime=[]
def isprime(num):
    # 如果为2或者3时 为质数
    import math
    if num == 2 or num == 3:
      return True
    # 不在6的倍数两侧的一定不是质数
    if num % 6 != 1 and num % 6 != 5:
      return False
    # 取num的平均数
    tmp = int(math.sqrt(num))+1
    #在6的倍数的两侧的也可能不是质数
    for i in range(5, tmp, 6):
      if num % i == 0 or num % (i+2) == 0:
            return False
    #是质数
    return True
# print("zhishu:" , isprime(7))
for i in range(1 , zhengshu+1):
   if isprime(i):
       prime.append(i)
print(prime)
tmp=0
char=""
for i in range(1,len(prime)+1):
    tmp=tmp+prime
    if tmp >1000:
      break
    if(isprime(tmp)):
      for j in range(1,i+1):
            char=char+"+"+str(prime)
      print(str(tmp),"=",char)
      char=''

wyp02033 发表于 2017-10-6 23:20:38

def isprime(n):
    if n == 1:
      return False
    if n == 2 :
      return True

    for i in range(2,n//2 + 1):
      if n % i == 0:
            return False

    return True

result = []
primes = []
for i in range(2,1000):
    if isprime(i):
      primes.append(i)
for i in range(2,len(primes)+1):
    if isprime(sum(primes[:i])):
      
      result.append(sum(primes[:i]))

shigure_takimi 发表于 2017-12-2 04:38:39

def isPrime(n):
    if n < 2:
      return False
    elif n == 2 or n == 3:
      return True
    else:
      for i in range(2, int(n**0.5)+1):
            if n%i == 0:
                return False
      return True

def fun(n):
    allPrimes = []
    for i in range(2, n+1):
      if isPrime(i):
            allPrimes.append(i)
            if sum(allPrimes) > n:
                break
    return ) for i in range(1,len(allPrimes)) if isPrime(sum(allPrimes))]

print(fun(1000))

永恒的蓝色梦想 发表于 2019-8-18 17:54:56

def makeprimes(end):
primelist=*(end+1)
primelist,primelist=None,False
for i,prime in enumerate(primelist[:int(end/2+1)]):
    if prime:
      for j in range(2*i,end+1,i):primelist=False
return
i=2;l=makeprimes(500000);re=[];k=0
while k<1000:
        k=sum(l[:i])
        if k in l:re.append(k)
        i+=1
print(re)

小贤啊哦 发表于 2020-5-7 20:19:37

def fun78():
    a=[]
    b=[]
    s=0
    for i in range(2,1000):
      for j in range(2,i):
            if i%j==0:
                break
      else:
            a.append(i)
            
    for i in range(len(a)):
      s+=a
      if s in a:
            b.append(s)
    return b
print(fun78())

kinkon 发表于 2022-3-8 10:23:51

def fun109(n):
    f = set()
    p, Sum = set(), 0
    for i in range(2, n + 1):
      for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                break
      else:
            f.add(i)
            Sum += i
            p.add(Sum)
            
    return f & p
   

print(fun109(1000))
页: [1]
查看完整版本: Python:每日一题 109