Python:每日一题 134
本帖最后由 冬雪雪冬 于 2018-1-11 19:08 编辑我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。
题目:
我们知道质数是2, 3, 5, 7, 11, 13, 17, 19......
首先生成1000以内的质数列表,临近的质数相减都是偶数(除了3-2),我们把结果为质数或除2后为质数生成一个新的质数列表(例如差值为6,新列表中加入的是3),并去除重复的元素。
要求给出新列表,并由小到大排列。 # -*- coding:utf-8 -*-
zs =
for i in xrange(2, 1000):
for temp in xrange(2, i):
if i % temp == 0:
break
if temp == i - 1:
zs.append(i)
nzs = []
for i in range(1, len(zs)):
tmp = zs - zs
if tmp / 2 in zs:
if tmp / 2 not in nzs:
nzs.append(tmp / 2)
print sorted(nzs)
def isPrime(n):
if n == 2 or n == 3:
return True
elif n > 3:
if n % 2 == 0:
return False
else:
for i in range(3, int(n**0.5)+1):
if n % i == 0:
return False
else:
return True
primeInThousend =
for i in range(3, 1000, 2):
if isPrime(i):
primeInThousend.append(i)
length = len(primeInThousend)
x = set( - primeInThousend[:length-1] for i in range(length-1)])
result = []
for i in x:
if isPrime(i):
result.append(i)
elif isPrime(i//2):
result.append(i//2)
print(sorted(list(set(result))))
#result =
#不知道是不是这个意思。 from math import sqrt
def is_prime(n):
if n<=1:
return 0
for i in range(2,int(sqrt(n))+1):
if n%i==0:
return 0
return 1
def gg():
li = []
for n in range(1,1001):
if is_prime(n):
li.append(n)
re = set()
for i in range(1,len(li)):
if is_prime(li-li):
re.add(int(li-li))
elif is_prime((li-li)/2):
re.add(int((li-li)/2))
print(re)
本帖最后由 coopr 于 2018-1-8 18:59 编辑
#每日一题134
temp = 0
zhishu = []
for i in range (1,1000):
for j in range (2,i):
sum = i % j
if sum == 0:
temp = 1
if temp == 0:
zhishu.append(i)
temp = 0
print(zhishu) #质数列表
lengths = len(zhishu)
list = []
for k in range(1,lengths):
cha = zhishu - zhishu
if cha %2 == 0:
shang = cha//2
if cha in zhishu and cha not in list:
list.append(cha)
if shang in zhishu and shang not in list:
list.append(shang)
list.sort()
print(list)
from math import sqrt
def is_prime(n:int):
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False
return True
s = list(filter(is_prime, range(2, 1001)))
a = set()
for i in range(1, len(s)):
tmp = s - s
if tmp in s:
a.add(tmp)
elif (tmp / 2).is_integer() and int(tmp / 2) in s:
a.add(int(tmp / 2))
print(sorted(list(a))) 差值都是偶数,里面只有2一个质数吧
def fun(n):
prime_nums = [i for i in range(2, n+1)
if 0 not in {i%j for j in range(2, int(i**0.5)+1)}]
lst = {2 if j-i == 2 else (j-i)/2
for i,j in zip(prime_nums, prime_nums)}
return sorted(num for num in lst if num in prime_nums)
之前的题目有鱼油介绍过gmpy2,模仿写一个
from gmpy2 import next_prime
def fun2(n):
prms =
while prms[-1] <= n:
prms.append(next_prime(prms[-1]))
lst = {2 if j-i == 2 else (j-i)/2
for i,j in zip(prms[:-1], prms)}
return sorted(num for num in lst if num in prms) kankan def generate_primes(n):
primes = * n
primes, primes = False, False
for (i, prime) in enumerate(primes):
if prime:
for j in range(i*i, n, i):
primes = False
primes =
return primes
def main():
primes = generate_primes(1000)
new_primes = []
for i in range(1,len(primes)):
difference = primes - primes
if difference in primes and difference not in new_primes:
new_primes.append(difference)
elif difference % 2 == 0 and difference // 2 in primes and difference // 2 not in new_primes:
new_primes.append(difference//2)
new_primes.sort()
print(new_primes)
if __name__ == '__main__':
main()
结果: import math
lsit1=[]
lsit2=[]
sr_num=0
for i in range (2,1000):
fg=0
for n in range(2,int(math.sqrt(i))+1):
if i % n ==0:
fg=1
break
if fg ==0:
lsit1.append(i)
print(lsit1)
for i in range (len(lsit1)-1):
nu= lsit1-lsit1
if nu in lsit1:
lsit2.append(nu)
if nu//2 in lsit1:
lsit2.append(nu//2)
print(set(lsit2)) 求素数函数来自网络,是个“埃氏筛法”什么的,反正不是我写的。
def numsu(n):
'''返回n以内的素数列表'''
listdef=[]
flag = *(n+2)
p=2
while(p<=n):
listdef.append(p)
for i in range(2*p,n+1,p):
flag = False
while 1:
p += 1
if flag:
break
return listdef
list1=numsu(1000)
list2=[]
'''取素数列表两元素差的一半组成list2'''
for i in range(1,len(list1)):
temp=int((list1-list1)/2)
list2.append(temp)
'''set排重'''
list2=list(set(list2))
'''是素数放入list3'''
list3=[]
for i in list2:
if i in list1:
list3.append(i)
print(list3) def is_sushu(num):
res=True
for x in range(2,num-1):
if num%x==0:
res=False
return res
return res
list1=
list2=[]
for x in list1:
list2.append(x-list1)
list2.pop(0)
list3=set(list2)
list4=[]
for x in list3:
if is_sushu(int(x/2)) and int(x/2)>0:
list4.append(int(x/2))
print(list4) 本帖最后由 h20060304 于 2018-1-14 17:17 编辑
在下不才,献丑了。
# 在质数列表中,除了第一个质数2为偶数外,均为奇数,故先生成一个无限的奇数序列,从而为后续可以生成无限素数,打下基础,摆脱局限性。
def _odd_iter():
n = 1
while True:
n += 2
yield n
# 根据“埃氏筛选法”,逐步筛出所有的素数。
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
# 主程序,这里用first,和two,依次从素数序列中,取出两个元素,按照题目设定条件,进行筛查,并最终总返回结果。
def check_prime():
prime = primes()
first = next(prime)
two = next(prime)
lst = []
while two < 1000:
comp =
for prime1 in primes():
if comp >= prime1:
if prime1 in comp:
lst.append(prime1)
continue
else:
break
first, two = two, next(prime)
lst = set(lst)
print('运行结果:{}'.format(lst))
check_prime()
def primeNum(low,upper):
num=[]
for i in range(low,upper+1):
fg=0
for j in range(2,i):
if i%j==0:
fg=1
break
if fg==0:
num.append(i)
return num
def fun(list1):
new=[]
for i in range(1,len(list1)):
x=list1-list1
if x in list1:
new.append(int(x))
elif x/2 in list1:
new.append(int(x/2))
return new
list1=primeNum(1,1001)
list3=list(set(fun(list1)))
print(list3)
萌新{:10_254:}
import math
def prime(n):
if n == 2 or n == 3:
return True
i = int(math.sqrt(abs(n)))
while i >1:
if n % i == 0:
return False
break
else:
i -= 1
if i < 2:
return True
def main():
a = []
b = []
for i in range(1, 1000):
if prime(i):
a.append(i)
for p in range(2, len(a)):
m = (a - a)/2
if prime(m) == True :
if m not in b:
b.append(m)
b.sort()
print(b)
main()
def isPrime(n):
for i in range(2, int(n**0.5)+1):
if n%i == 0: return False
return n>=2
def f(n):
S = set()
L =
for i in range(len(L)-1):
if isPrime(L - L):
S.add(L - L)
elif isPrime((L - L)/2):
S.add(int((L - L)/2))
return sorted(list(S))
print(f(1000)) 本帖最后由 fan1993423 于 2018-3-26 18:40 编辑
m=[]
for a in range(2,1001):
if a==2:
m.append(a)
else:
if 0 not in :
m.append(a)
i=1
l=[]
while i<=len(m)-2:
if m-m in m:
l.append(m-m)
elif (m-m)//2 in m:
l.append((m-m)//2)
i+=1
print(list(set(l)))
<m=[]
for a in range(2,1001):
if a==2:
m.append(a)
else:
if 0 not in :
m.append(a)
i=1
l=[]
while i<=len(m)-2:
if m-m in m:
l.append(m-m)
elif (m-m)//2 in m:
l.append((m-m)//2)
i+=1
l=set(l)
print(list(l))> #coding=utf-8
primeList = []
primeNew = []
#生成质数
def getPrime() :
for i in range(2, 1001) :
flag = 0
for j in range(2, i + 1) :
if i % j == 0 :
flag += 1
if flag < 2 :
primeList.append(i)
#质数判定并返回
def primeConfirm(n) :
flag = 0
for i in range(2, n + 1) :
if n % i == 0 :
flag += 1
if flag < 2 :
primeNew.append(n)
#质数差值计算
def start() :
getPrime()
tempList = []
tempIndex = 0
for i in primeList :
tempIndex = primeList.index(i)
if tempIndex > 1 :
tempList.append(i - primeList)
for i in tempList :
if i % 2 != 0 :
primeConfirm(i)
else :
primeConfirm(i // 2)
print(set(primeNew))
start() def fun134(n):
p = []
for i in range(2, n + 1):
for j in range(2, int(i ** 0.5) + 1):
if i % j == 0:
break
else:
p.append(i)
#print(p)
s = set(p)
ans = set()
for i in range(1, len(p)):
cur = p - p
if cur in s:
ans.add(cur)
if cur / 2 in s:
ans.add(cur // 2)
return sorted(ans)
print(fun134(1000))
页:
[1]