QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

版主

Rank: 20Rank: 20Rank: 20Rank: 20

技术值
查看: 307|回复: 13

[技术交流] Python:每日一题 134

[复制链接]
最佳答案
563 
累计签到:754 天
连续签到:16 天
冬雪雪冬 发表于 2018-1-8 10:50:44 30713 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 冬雪雪冬 于 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),并去除重复的元素。
要求给出新列表,并由小到大排列。

本帖被以下淘专辑推荐:

楼层
跳转到指定楼层
最佳答案
1 
累计签到:1 天
连续签到:1 天
紫诺 发表于 2018-1-8 14:25:46 | 显示全部楼层
  1. # -*- coding:utf-8 -*-

  2. zs = [2, ]
  3. for i in xrange(2, 1000):
  4.     for temp in xrange(2, i):
  5.         if i % temp == 0:
  6.             break
  7.         if temp == i - 1:
  8.             zs.append(i)

  9. nzs = []
  10. for i in range(1, len(zs)):
  11.     tmp = zs[i] - zs[i - 1]
  12.     if tmp / 2 in zs:
  13.         if tmp / 2 not in nzs:
  14.             nzs.append(tmp / 2)

  15. print sorted(nzs)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
1 
累计签到:7 天
连续签到:7 天
shigure_takimi 发表于 2018-1-8 16:06:24 | 显示全部楼层
  1. def isPrime(n):
  2.     if n == 2 or n == 3:
  3.         return True
  4.     elif n > 3:
  5.         if n % 2 == 0:
  6.             return False
  7.         else:
  8.             for i in range(3, int(n**0.5)+1):
  9.                 if n % i == 0:
  10.                     return False
  11.             else:
  12.                 return True

  13. primeInThousend = [2]
  14. for i in range(3, 1000, 2):
  15.     if isPrime(i):
  16.         primeInThousend.append(i)

  17. length = len(primeInThousend)

  18. x = set([primeInThousend[1:][i] - primeInThousend[:length-1][i] for i in range(length-1)])
  19. result = []
  20. for i in x:
  21.     if isPrime(i):
  22.         result.append(i)
  23.     elif isPrime(i//2):
  24.         result.append(i//2)

  25. print(sorted(list(set(result))))
  26.    
  27. #  result = [2, 3, 5, 7]
  28. #  不知道是不是这个意思。
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 是这个意思

查看全部评分

最佳答案
0 
累计签到:2 天
连续签到:1 天
浪子无名1517 发表于 2018-1-8 17:15:52 | 显示全部楼层
  1. from math import sqrt
  2. def is_prime(n):
  3.     if n<=1:
  4.         return 0
  5.     for i in range(2,int(sqrt(n))+1):
  6.         if n%i==0:
  7.             return 0
  8.     return 1
  9. def gg():
  10.     li = []
  11.     for n in range(1,1001):
  12.         if is_prime(n):
  13.             li.append(n)
  14.     re = set()
  15.     for i in range(1,len(li)):
  16.         if is_prime(li[i]-li[i-1]):
  17.             re.add(int(li[i]-li[i-1]))
  18.         elif is_prime((li[i]-li[i-1])/2):
  19.             re.add(int((li[i]-li[i-1])/2))
  20.     print(re)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
累计签到:3 天
连续签到:1 天
coopr 发表于 2018-1-8 18:56:45 | 显示全部楼层
本帖最后由 coopr 于 2018-1-8 18:59 编辑
  1. #每日一题134
  2. temp = 0
  3. zhishu = []
  4. for i in range (1,1000):
  5.         for j in range (2,i):
  6.                 sum = i % j
  7.                 if sum == 0:
  8.                         temp = 1
  9.         if temp == 0:
  10.                 zhishu.append(i)
  11.         temp = 0
  12. print(zhishu)                                 #质数列表
  13. lengths = len(zhishu)
  14. list = []
  15. for k in range(1,lengths):
  16.         cha = zhishu[k] - zhishu[k-1]
  17.         if cha %2 == 0:
  18.                 shang = cha//2
  19.                 if cha in zhishu and cha not in list:
  20.                         list.append(cha)
  21.                 if shang in zhishu and shang not in list:
  22.                         list.append(shang)
  23. list.sort()
  24. print(list)
  25.                
复制代码
最佳答案
11 
累计签到:10 天
连续签到:1 天
bush牛 发表于 2018-1-8 19:58:36 | 显示全部楼层
  1. from math import sqrt
  2. def is_prime(n:int):
  3.     for i in range(2, int(sqrt(n)) + 1):
  4.         if n % i == 0:
  5.             return False
  6.     return True
  7. s = list(filter(is_prime, range(2, 1001)))
  8. a = set()
  9. for i in range(1, len(s)):
  10.     tmp = s[i] - s[i - 1]
  11.     if tmp in s:
  12.         a.add(tmp)
  13.     elif (tmp / 2).is_integer() and int(tmp / 2) in s:
  14.         a.add(int(tmp / 2))
  15. print(sorted(list(a)))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
3 
累计签到:335 天
连续签到:60 天
solomonxian 发表于 2018-1-8 20:35:44 | 显示全部楼层
差值都是偶数,里面只有2一个质数吧
  1. def fun(n):
  2.     prime_nums = [i for i in range(2, n+1)
  3.                  if 0 not in {i%j for j in range(2, int(i**0.5)+1)}]
  4.     lst = {2 if j-i == 2 else (j-i)/2
  5.            for i,j in zip(prime_nums, prime_nums[1:])}
  6.     return sorted(num for num in lst if num in prime_nums)
复制代码

之前的题目有鱼油介绍过gmpy2,模仿写一个
  1. from gmpy2 import next_prime

  2. def fun2(n):
  3.     prms = [next_prime(0)]
  4.     while prms[-1] <= n:
  5.         prms.append(next_prime(prms[-1]))
  6.     lst = {2 if j-i == 2 else (j-i)/2
  7.            for i,j in zip(prms[:-1], prms[1:-1])}
  8.     return sorted(num for num in lst if num in prms)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
1 
累计签到:207 天
连续签到:2 天
流月飞星 发表于 2018-1-8 20:58:17 | 显示全部楼层
kankan
最佳答案
1 
累计签到:8 天
连续签到:1 天
wyp02033 发表于 2018-1-8 21:38:58 | 显示全部楼层
  1. def generate_primes(n):
  2.     primes = [True] * n
  3.     primes[0], primes[1] = False, False
  4.     for (i, prime) in enumerate(primes):
  5.         if prime:
  6.             for j in range(i*i, n, i):
  7.                 primes[j] = False
  8.     primes = [k for (k, prime) in enumerate(primes) if prime]
  9.     return primes

  10. def main():
  11.     primes = generate_primes(1000)
  12.     new_primes = []
  13.     for i in range(1,len(primes)):
  14.         difference = primes[i] - primes[i-1]
  15.         if difference in primes and difference not in new_primes:
  16.             new_primes.append(difference)
  17.         elif difference % 2 == 0 and difference // 2 in primes and difference // 2 not in new_primes:
  18.             new_primes.append(difference//2)
  19.     new_primes.sort()
  20.     print(new_primes)

  21. if __name__ == '__main__':
  22.     main()
复制代码

结果:[2, 3, 5, 7]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 

尚未签到

lihw 发表于 2018-1-8 21:41:15 | 显示全部楼层
  1. import math
  2. lsit1=[]
  3. lsit2=[]
  4. sr_num=0

  5. for i in range (2,1000):
  6.     fg=0
  7.     for n in range(2,int(math.sqrt(i))+1):
  8.         if i % n ==0:
  9.             fg=1
  10.             break
  11.     if fg ==0:
  12.         lsit1.append(i)
  13.         
  14. print(lsit1)
  15. for i in range (len(lsit1)-1):
  16.     nu= lsit1[i+1]-lsit1[i]
  17.     if nu in lsit1:
  18.         lsit2.append(nu)
  19.     if nu//2 in lsit1:
  20.         lsit2.append(nu//2)
  21. print(set(lsit2))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
2 
累计签到:326 天
连续签到:13 天
编程新血 发表于 2018-1-9 19:47:05 | 显示全部楼层
求素数函数来自网络,是个“埃氏筛法”什么的,反正不是我写的。

def numsu(n):
    '''返回n以内的素数列表'''
    listdef=[]
    flag = [True]*(n+2)
    p=2
    while(p<=n):
        listdef.append(p)
        for i in range(2*p,n+1,p):
            flag[i] = False
        while 1:
            p += 1
            if flag[p]:
                break
    return listdef

list1=numsu(1000)
list2=[]
'''取素数列表两元素差的一半组成list2'''
for i in range(1,len(list1)):
    temp=int((list1[i]-list1[i-1])/2)
    list2.append(temp)
   
'''set排重'''
list2=list(set(list2))

'''是素数放入list3'''
list3=[]
for i in list2:
    if i in list1:
        list3.append(i)
print(list3)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

最佳答案
0 
累计签到:3 天
连续签到:3 天
achencan 发表于 2018-1-9 20:12:31 | 显示全部楼层
  1. def is_sushu(num):
  2. res=True
  3. for x in range(2,num-1):
  4.   if num%x==0:
  5.    res=False
  6.    return res
  7. return res
  8. list1=[x for x in filter(is_sushu,range(2,1001))]
  9. list2=[]
  10. for x in list1:
  11.     list2.append(x-list1[list1.index(x)-1])
  12. list2.pop(0)
  13. list3=set(list2)
  14. list4=[]
  15. for x in list3:
  16.     if is_sushu(int(x/2)) and int(x/2)>0:
  17.         list4.append(int(x/2))
  18. print(list4)
复制代码
最佳答案
1 
累计签到:2 天
连续签到:2 天
h20060304 发表于 5 天前 | 显示全部楼层
本帖最后由 h20060304 于 2018-1-14 17:17 编辑

在下不才,献丑了。


  1. # 在质数列表中,除了第一个质数2为偶数外,均为奇数,故先生成一个无限的奇数序列,从而为后续可以生成无限素数,打下基础,摆脱局限性。

  2. def _odd_iter():
  3.     n = 1
  4.     while True:
  5.         n += 2
  6.         yield n

  7. # 根据“埃氏筛选法”,逐步筛出所有的素数。

  8. def _not_divisible(n):
  9.     return lambda x: x % n > 0


  10. def primes():
  11.     yield 2
  12.     it = _odd_iter()
  13.     while True:
  14.         n = next(it)
  15.         yield n
  16.         it = filter(_not_divisible(n), it)

  17. # 主程序,这里用first,和two,依次从素数序列中,取出两个元素,按照题目设定条件,进行筛查,并最终总返回结果。

  18. def check_prime():
  19.     prime = primes()
  20.     first = next(prime)
  21.     two = next(prime)
  22.     lst = []
  23.     while two < 1000:
  24.         comp = [two - first, (two - first) // 2]
  25.         for prime1 in primes():
  26.             if comp[0] >= prime1:
  27.                 if prime1 in comp:
  28.                     lst.append(prime1)
  29.                     continue
  30.             else:
  31.                 break
  32.         first, two = two, next(prime)
  33.     lst = set(lst)
  34.     print('运行结果:{}'.format(lst))


  35. check_prime()
复制代码



QQ截图20180114165759.png
最佳答案
0 

尚未签到

wojiaodabai 发表于 3 天前 | 显示全部楼层
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[i]-list1[i-1]
        
        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)

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-1-19 21:46

快速回复 返回顶部 返回列表