冬雪雪冬 发表于 2018-1-10 08:48:42

Python:每日一题 135

本帖最后由 冬雪雪冬 于 2018-1-11 20:14 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
这回还是与质数有关的题。
对于下列的一组数字,筛选出能够分解成两个质数之和的,如9可以分解为2+7,而11则无法分解成两个质数之和
5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30

shigure_takimi 发表于 2018-1-10 09:06:38

本帖最后由 shigure_takimi 于 2018-1-10 11:39 编辑

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, 2):
                if n % i == 0:
                  return False
            else:
                return True


def canDivide(n):
    if isPrime(n-2):
      print(n,'=',2,'+',n-2)
      return True
    else:
      for i in range(3, n, 2):
            if isPrime(i):
                if isPrime(n - i):
                  print(n,'=',i,'+',n-i)
                  return True
      else:
            print(n,"Can't Divide to 2 primes.")
            return False

numbers =
for i in numbers:
    canDivide(i)


##    5 = 2 + 3
##    6 = 3 + 3
##    8 = 3 + 5
##    13 = 2 + 11
##    14 = 3 + 11
##    15 = 2 + 13
##    16 = 3 + 13
##    17 Can't Divide to 2 primes.
##    20 = 3 + 17
##    21 = 2 + 19
##    24 = 5 + 19
##    26 = 3 + 23
##    27 Can't Divide to 2 primes.
##    30 = 7 + 23

jfmlj 发表于 2018-1-10 09:48:24

本帖最后由 jfmlj 于 2018-1-10 09:58 编辑


list1=

list2=[]
list3=[]

for i in range(0,30):
    for j in range(2,30):
      if i==j:
            list2.append(i)
      elif i%j==0:
            break

for i in list2:
    for j in list2:
      if (i+j) in list1:
            list3.append(i+j)

list3=set(list3)
print(list3)


{5, 6, 8, 13, 14, 15, 16, 20, 21, 24, 26, 30}
找不到哪里设置权限可见。。。

空巷无人故人叹 发表于 2018-1-10 10:33:30

number_1 =
prime = []
answer = []

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

def in_answer(n,list1):
    for i in list1:
      a = n - i
      if a in list1:
            return True

for i in range(2,30):
    a = is_prime(i)
    if a :
      prime.append(i)
      
for i in number_1 :
    b = in_answer(i,prime)
    if b :
      answer.append(i)

print (answer)

haixiaotian 发表于 2018-1-10 11:23:52

#对于下列的一组数字,筛选出能够分解成两个质数之和的,如9可以分解为2+7,而11则无法分解成两个质数之和
#5, 6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30
from math import *
#找出30以内的质数
prime = [ ]
for x in range(2,30):
        n = int(sqrt(x)) + 1
        for y in range(2,n+1):
                if y == n:
                        prime.append(x)
                if x % y == 0:
                        break       
#筛选出分解成两个质数之和的数       
out = [ ]
number =
for num in number:
        for i in prime:
                for j in prime:
                        if num == i + j:
                                #print(num,'=',i,'+',j)
                                out.append(num)

#去除重复的元素
i = 0
print(out)
while i < len(out):
        if i + 1 >= len(out):
                break
        if out == out:
                del out
                continue
        else:
                i += 1
print(out)


cnkizy 发表于 2018-1-10 12:03:30

本帖最后由 cnkizy 于 2018-1-10 18:26 编辑

#!/usr/bin/python
# -*- coding: utf-8 -*-
nmb = (5,6, 8, 13, 14, 15, 16, 17, 20, 21, 24, 26, 27, 30)
prime = (2,3,5,7,11,13,17,19,23)
#这么写算不算作弊....上次我看那个print(4/7)都行
result=dict()
for i in nmb:
        for j in prime:
                for k in prime:
                        if j+k==i:
                                #print("{0}+{1}={2}".format(j,k,i))
                                result=0
for i in result:
        print(i)

学汇编路过这个板块 看到刚出炉的题 顺便练练手

时间复杂度 我猜猜应该是 O(n3)

vite 发表于 2018-1-10 13:11:06

numbers = (5,6,8,13,14,15,16,17,20,21,24,26,27,30)
primeNumbers = (2,3,5,7,11,13,17,19,23,29) #质数
SPN = {}
spn = []
#筛选数据函数
def screen ():
    for num in numbers :
      for Pnum in primeNumbers :
            if Pnum > num or Pnum == num :
                index = primeNumbers.index(Pnum)
                break
      x = primeNumbers
      y = primeNumbers
      temp = [(a,b) for a in x
                for b in y
                if a+b == num]
      if temp :
            SPN = temp
            spn.append (num)
    print ('下面是两个质数组合的可能性\n',SPN,
         '\n下面是可以筛选出来的数字\n',spn)
if __name__ == '__main__':
    screen()

jerryxjr1220 发表于 2018-1-10 14:00:13

lst =
primes =
from itertools import combinations_with_replacement as cwr
for i,j in cwr(primes,2):
        if i+j in lst:
                print(i+j,i,j)

sunnychou 发表于 2018-1-10 15:17:28

list1 =
shu = []
import math
def sushu(num):
    if num == 2:
      return 2
    if num<2:
      return
    for i in range(2,int(math.sqrt(num))+1):
      if num % i == 0:
            return
    return num
for i in range(2, list1[-1]+1):
    if sushu(i) != None:
      shu.append(sushu(i))
c = []
for i in range(len(list1)-1):
    j = 0
    while (list1-shu) > 0:
      if shu != (list1-shu) and (list1-shu) in shu:
            c.append(list1)
            break
      j += 1
print(c)

lihw 发表于 2018-1-10 16:10:09

list1=
list2=
for i in list2:
    for j in list1:
      if i > j:
            if i -j in list1:
                print(i)
                break
结果包含了两个相同素数相加的情况

紫夜之恋 发表于 2018-1-10 16:27:32

本帖最后由 紫夜之恋 于 2018-1-10 16:31 编辑

def prime(x):
    for i in range(2, x//2+1):
      if not x%i:
            return False
    return True

list2 = []

def primeAdd(x):
    for each in x:
      for i in range(each//2):
            number1 = i+1
            number2 = each-number1
            if prime(number1) and prime(number2):
                list2.append(each)
                break

    print(list2)
    list2.clear()

list1 =
primeAdd(list1)


Jons 发表于 2018-1-10 16:30:50

lists =
data = []
for i,n in enumerate(lists):
    n1 = 0
    for j in range(2,n+1):
      #什么是质数,除了1和它本身不能被任何数整除
      #去除偶数和奇数
      if (j%2)!=0 or (j%3)!=0 or j ==2 or j == 3:
            if (n1 > 0):
                if n == (n1+j):
                  data.append(n)
            else:
                n1 = j

print('筛选出能够分解成两个质数之和数组%s' %data)

筛选出能够分解成两个质数之和数组

wojiaodabai 发表于 2018-1-10 19:40:12

x=

num=[]

for i in range(2,100):
   for j in range(2,i):
      if(i%j==0):
         break
   else:
      num.append(i)
print(num)

y=[]
for m in x:
    for j in num:
      for k in num:
            if m==j+k :
               print(m)
               y.append(m)
               print(j,k)
            else:
                break
            
print(y)

bush牛 发表于 2018-1-10 19:42:20

a =
# 先来个质数判断
def is_prime(n):
    for i in range(2,n):
      if n % i == 0:
            return False
    return True
#能生成的质数
mx = max(a)
primeList = list()
for i in range(2,mx+1):
    if is_prime(i):
      primeList.append(i)
for i in a:
    for j in primeList:
      if i-j in primeList and i > j:
            print("满足条件的:" + str(i), "质数:" + str(j), "质数:" + str(i-j))
            #当出现6的时候会有两个相同的质数,如果不满足可以再加条件
            break

小黑大人 发表于 2018-1-10 19:48:59

list1 =
list2 = #(0~30以内的质数)
list3 = []
for i in list1:
    for m in list2:
      n = i - m
      if n in list2:
            list3.append(i)
            break
print(list3)

大头目 发表于 2018-1-10 20:07:32

{:10_266:}

solomonxian 发表于 2018-1-10 21:42:06

从质数组合入手不知道会不会快一点
def fun(lst):
    prime_nums = [i for i in range(2, max(lst)+1)
                  if 0 not in {i%j for j in range(2, int(i**0.5)+1)}]
    sums = {i+j for i in prime_nums for j in prime_nums}
    return set(lst) & sums

wyp02033 发表于 2018-1-10 22:27:39

def generate_primes(n):
    primes = * n
    primes, primes = False, False
    for (i, p) in enumerate(primes):
      if p:
            for j in range(i*i, n, i):
                primes = False
    return

def main():
    nums =
    primes = generate_primes(max(nums))
    for each in nums:
      #print(each)
      for prime in primes:
            #print("prime", prime)
            result = each - prime
            if result > 0 and result in primes and result != prime:
                print(each, prime, result)
                break

if __name__ == '__main__':
    main()
结果:5 2 3
8 3 5
13 2 11
14 3 11
15 2 13
16 3 13
20 3 17
21 2 19
24 5 19
26 3 23
30 7 23

大头目 发表于 2018-1-11 08:50:59

primelist=

group1=

checklist=[]
for sum1 in group1:
        for prime1 in primelist:
                for prime2 in primelist:
                        if prime1+prime2==sum1:
                                if prime1<=prime2:
                                        print('{0}={1}+{2}'.format(sum1,prime1,prime2))
                                if sum1 not in checklist:
                                        checklist.append(sum1)
                                       
print(checklist)

xiaolianlian123 发表于 2018-1-11 09:23:14

def isprime(num):
    count=num//2
    while count>1:
      if num % count ==0:
            return False
            break
      else:
            count-=1
    if count==1:
      return True
a=
for k in range(0,14):
    for i in range(1,a+1):
      if (isprime(a-i)) and (isprime(i)):
            print('%d=%d+%d'%(a,i,a-i))
            break
页: [1] 2
查看完整版本: Python:每日一题 135