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个质数相加得到的质数列表。 是前任意个相加,没理解错吧,
筛出质数,累加,求交集
from itertools import accumulate
def fun(n):
prime = ]
acc_prime = set(accumulate(prime)) - {2} # 2 作为累加第一项多余
return set(prime) & acc_prime
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 solomonxian 发表于 2017-10-2 19:14
是前任意个相加,没理解错吧,
筛出质数,累加,求交集
又看了一遍题,发现和你理解有点区别。。貌似你理解的对的。。尴尬 bush牛 发表于 2017-10-2 20:42
又看了一遍题,发现和你理解有点区别。。貌似你理解的对的。。尴尬
审题,敲黑板,划重点{:9_217:} solomonxian 发表于 2017-10-2 19:14
是前任意个相加,没理解错吧,
筛出质数,累加,求交集
我可能没有写清楚,每次都是从2开始加。 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)) #质数求和仍然为质数
#求出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)
运行结果: 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函数 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='' 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])) 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))
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) 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()) 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]