鱼C论坛

 找回密码
 立即注册
查看: 4119|回复: 19

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

[复制链接]
发表于 2018-1-8 10:50:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 是这个意思

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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.                
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 20:58:17 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 16:56:33 | 显示全部楼层
本帖最后由 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[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)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-5 22:04:17 | 显示全部楼层
萌新
  1. import math
  2. def prime(n):
  3.     if n == 2 or n == 3:
  4.          return True
  5.     i = int(math.sqrt(abs(n)))
  6.     while i >1:
  7.         if n % i == 0:
  8.             return False
  9.             break
  10.         else:
  11.             i -= 1
  12.             if i < 2:
  13.                 return True
  14. def main():
  15.     a = []
  16.     b = []
  17.     for i in range(1, 1000):
  18.         if prime(i):
  19.             a.append(i)   
  20.     for p in range(2, len(a)):
  21.         m = (a[p] - a[p-1])/2
  22.         if prime(m) == True :
  23.             if m not in b:
  24.                 b.append(m)
  25.     b.sort()
  26.     print(b)
  27. main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 16:44:55 | 显示全部楼层
  1. def isPrime(n):
  2.     for i in range(2, int(n**0.5)+1):
  3.         if n%i == 0: return False
  4.     return n>=2

  5. def f(n):
  6.     S = set()
  7.     L = [x for x in range(2, n+1) if isPrime(x)]
  8.     for i in range(len(L)-1):
  9.         if isPrime(L[i+1] - L[i]):
  10.             S.add(L[i+1] - L[i])
  11.         elif isPrime((L[i+1] - L[i])/2):
  12.             S.add(int((L[i+1] - L[i])/2))
  13.     return sorted(list(S))

  14. print(f(1000))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 [a%b for b in range(2,a)] :
                m.append(a)
i=1
l=[]
while i<=len(m)-2:
    if m[i+1]-m in m:
        l.append(m[i+1]-m)
    elif (m[i+1]-m)//2 in m:
                 l.append((m[i+1]-m)//2)
    i+=1
print(list(set(l)))

            
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 18:41:04 | 显示全部楼层
<m=[]
for a in range(2,1001):
    if a==2:
       m.append(a)
    else:
        if 0 not in [a%b for b in range(2,a)] :
                m.append(a)
i=1
l=[]
while i<=len(m)-2:
    if m[i+1]-m[i] in m:
        l.append(m[i+1]-m[i])
    elif (m[i+1]-m[i])//2 in m:
                 l.append((m[i+1]-m[i])//2)
    i+=1
l=set(l)
print(list(l))>        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[tempIndex - 1])
        for i in tempList :
                if i % 2 != 0 :
                        primeConfirm(i)
                else :
                        primeConfirm(i // 2)
        print(set(primeNew))

start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 13:58:53 | 显示全部楼层
  1. def fun134(n):   
  2.     p = []
  3.     for i in range(2, n + 1):
  4.         for j in range(2, int(i ** 0.5) + 1):
  5.             if i % j == 0:
  6.                 break
  7.         else:
  8.             p.append(i)
  9.     #print(p)

  10.     s = set(p)
  11.     ans = set()
  12.     for i in range(1, len(p)):
  13.         cur = p[i] - p[i - 1]
  14.         if cur in s:
  15.             ans.add(cur)
  16.         if cur / 2 in s:
  17.             ans.add(cur // 2)
  18.             
  19.     return sorted(ans)

  20. print(fun134(1000))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 09:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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