鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-1-11 18:06:01 | 显示全部楼层
  1. # -*- coding:UTF-8 -*-
  2. def sushu(num):
  3.     res=True
  4.     for x in range(2,num-1):
  5.         if num%x==0:
  6.             res=False
  7.             return res
  8.     return res

  9. def jadge(n):
  10.     for i in range(1,n+1):
  11.         if sushu(i) and sushu(n-i):
  12.             return i

  13. list_1 = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
  14. for x in list_1:
  15.     if not jadge(x):
  16.         list_1.pop(list_1.index(x))
  17. print(list_1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-13 10:20:41 | 显示全部楼层
第一次做做了好久
  1. # 判断是否为质数
  2. def is_prime_num(number):
  3.     list1 = [] # 如果这个列表长度为0,则为质数
  4.     number = int(number)
  5.    
  6.     for i in range(2,number):
  7.             if number % i == 0:
  8.                 list1.append(i)
  9.                
  10.     if len(list1) == 0:
  11.         return True # 是质数 为True
  12.     else:
  13.         return False #不是质数为False

  14. #筛选
  15. def is_prime_adding(number):
  16.     number = int(number)
  17.     list2 = []
  18.     adding = []
  19.     for i in range(2,number):
  20.         for j in range(i,number):
  21.             if i + j == number:
  22.                 if is_prime_num(i) is True and is_prime_num(j) is True:
  23.                     list2.append(number)
  24.                     adding.append([i ,'+', j])                 
  25.     if len(list2) != 0: # 这里因为list2 为0 ,adding 也一定为0,所以不用判定adding
  26.         for each in range(len(list2) -1): #删除list2 中重复的元素
  27.             del list2[each]
  28.         print(list2)
  29.         print(adding) # 打印符合条件的和的组合
  30.    
  31. # 输入任何范围,可打印出符合的结果
  32. for number in range(31):
  33.     is_prime_adding(number)
复制代码

求版主批改,和优化建议
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 14:21:36 | 显示全部楼层
没看答案,自己做了遍。每天进步一点点

def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    else:
        return True


list1 = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
l1=[]
for v in list1:
    n = round(v / 2)
    for j in range(2, n+1):
        if is_prime(j):
            if is_prime(v-j):
                if v not in l1:     # 去掉重复的
                    l1.append(v)

print(l1)

结果:
[5, 6, 8, 13, 14, 15, 16, 20, 21, 24, 26, 30]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 16:32:48 | 显示全部楼层
  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 isPrimeSum(n):
  6.     for x in range(2, n//2+1):
  7.         if isPrime(x) and isPrime(n-x): return True
  8.     return False

  9. def f(L):
  10.     return [x for x in L if isPrimeSum(x)]

  11. L = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]

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

使用道具 举报

发表于 2018-2-8 18:52:46 | 显示全部楼层
  1. def isPrime(n):
  2.   if n <= 1:
  3.     return False
  4.   i = 2
  5.   while i*i <= n:
  6.     if n % i == 0:
  7.       return False
  8.     i += 1
  9.   return True

  10. L = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
  11. for i in L:
  12.         for j in range(i // 2 + 1):
  13.                 if isPrime(j) and isPrime(i - j):
  14.                         print('%2d = %d + %d'%(i, j, i-j))
  15.                         break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 10:39:07 | 显示全部楼层
  1. prime=[2,3,5,7,11,13,17,19,23,29]
  2. list1 = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
  3. result = []

  4. for each in list1:
  5.     [(result.append(each)) for i in range(2, each//2+1) if (i in prime) and (each - i in prime)]
  6. print(set(result))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-4 15:24:15 | 显示全部楼层
  1. list1 = [5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
  2. list2 = []

  3. #判断是否为质数,若是则返回真
  4. def primeConfirm(n) :
  5.         flag = 0
  6.         for i in range(2, n) :
  7.                 if n % i == 0 :
  8.                         flag += 1
  9.         if flag < 1 :
  10.                 return True
  11.         else :
  12.                 return False

  13. #数值分解
  14. def numSplit() :
  15.         tempNum = 2
  16.         tempPrime = 0
  17.         for i in list1 :
  18.                 tempPrime = i - tempNum
  19.                 if primeConfirm(tempPrime) :
  20.                         list2.append(i)
  21.                 else :
  22.                         for j in range(2, i - 1) :
  23.                                 if primeConfirm(j) and primeConfirm(i - j) :
  24.                                         list2.append(i)
  25.                                         break
  26.         print(list2)

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

使用道具 举报

发表于 2019-3-21 10:38:21 | 显示全部楼层
本帖最后由 咕咕鸡鸽鸽 于 2019-3-21 10:40 编辑
  1. from itertools import permutations as per

  2. def is_prime(n):
  3.     for i in range(2,int(pow(n,0.5) + 1)):
  4.         if not n%i:
  5.             return False
  6.     return True

  7. def fun135(list1):
  8.     prime_list = [2]
  9.     list2 = []
  10.     #除2外,所有相近的质数之差为偶数
  11.     for i in range(3,max(list1),2):
  12.         if is_prime(i):
  13.             prime_list.append(i)

  14.     for each in list1:
  15.         for prime in per(prime_list,2):        
  16.             if sum(prime) == each:
  17.                 list2.append("%d = %d + %d" % (each,prime[0],prime[1]))

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

使用道具 举报

发表于 2020-5-12 20:27:51 | 显示全部楼层
  1. def fun95(alist):
  2.     a=[]
  3.     b=[]
  4.     for i in range(2,30):
  5.         flg=1
  6.         for j in range(2,i):
  7.             if i%j==0:
  8.                 flg=0
  9.                 break
  10.         if flg==1:
  11.             a.append(i)
  12.             
  13.     for x in a:
  14.         for y in a:
  15.             if (x+y) in alist:
  16.                 b.append(x+y)
  17.     return list(set(b))
  18. alist=[5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]
  19. print(fun95(alist))        
复制代码

[5, 6, 8, 13, 14, 15, 16, 20, 21, 24, 26, 30]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 14:25:23 | 显示全部楼层
  1. def fun135(nums):   
  2.     s = set()
  3.     for i in range(2, max(nums) + 1):
  4.         for j in range(2, int(i ** 0.5) + 1):
  5.             if i % j == 0:
  6.                 break
  7.         else:
  8.             s.add(i)
  9.    
  10.     ans = []
  11.     for num in nums:
  12.         for k in s:
  13.             cur = num - k
  14.             if cur != k and cur in s:
  15.                 print("满足条件的:" + str(num), "质数:" + str(cur), "质数:" + str(k))
  16.                 break
  17.             
  18.     return '检查完毕!'

  19. print(fun135([5, 6, 8, 11, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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