冬雪雪冬 发表于 2018-1-8 10:50:44

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),并去除重复的元素。
要求给出新列表,并由小到大排列。

紫诺 发表于 2018-1-8 14:25:46

# -*- 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)

shigure_takimi 发表于 2018-1-8 16:06:24

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 =
#不知道是不是这个意思。

浪子无名1517 发表于 2018-1-8 17:15:52

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:56:45

本帖最后由 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)
               

bush牛 发表于 2018-1-8 19:58:36

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)))

solomonxian 发表于 2018-1-8 20:35:44

差值都是偶数,里面只有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)

流月飞星 发表于 2018-1-8 20:58:17

kankan

wyp02033 发表于 2018-1-8 21:38:58

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()
结果:

lihw 发表于 2018-1-8 21:41:15

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))

编程新血 发表于 2018-1-9 19:47:05

求素数函数来自网络,是个“埃氏筛法”什么的,反正不是我写的。

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)

achencan 发表于 2018-1-9 20:12:31

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 16:56:33

本帖最后由 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()



wojiaodabai 发表于 2018-1-16 22:34:40

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)

YBKathus 发表于 2018-2-5 22:04:17

萌新{: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()

dunhee 发表于 2018-2-8 16:44:55

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:38:59

本帖最后由 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)))

            
   

fan1993423 发表于 2018-3-26 18:41:04

<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))>      

foxiangzun 发表于 2019-1-3 23:10:32

#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()

kinkon 发表于 2022-3-9 13:58:53

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]
查看完整版本: Python:每日一题 134