丨游戏灬需要 发表于 2018-7-28 00:51:15

本帖最后由 丨游戏灬需要 于 2018-7-29 07:32 编辑

from math import sqrt
def is_prime(n):
    #直接拿百度的代码,因为自己想不出
    if n == 1:
      return False
    for i in range(2, int(sqrt(n))+1):
      if n % i == 0:
            return False
    return True

#参考
#result =


#此处为学习了3楼大神后的答案
def q(range_ ,start = 10 ):
    p =
    time = len(str(range_))-1
    '''次数-1 指循环range_的位数次(例如百位就循环两次,例如:
range_为100(三位数),time就为2(循环两次),下面循环先以temp1(第一次为p[:])为
基底,每次循环拼接出一个十位数(指在十位数里符合条件的),然后extend给result
便完成这次循环)'''
    result = []
    temp = []
    temp.extend(p)
    result.extend(p)

    #运行位数次的循环,每次在先前列表的每位质数中添加一个单位质数并判断是否为质数
    #原本想写给几个位数就添加几个for循环的代码,但一是写不出,二是好像并不能达到结果
    for i in range(time):
      temp1 = temp[:]
      temp = []
      for i2 in temp1:
            for i3 in p:
                num = int(str(i2)+str(i3))
                if is_prime(num) :#and num <= range_:#反正循环了一次,就顺便看看是不是超过范围
                  temp.append(num)
      result.extend(temp)
               
    result = list(filter(lambda x: range_ > x > start ,result))
    return result
   
#现在可以随意规定范围了
print (q(500 ,start = 10))

llok4 发表于 2018-7-28 15:04:40

zh=[]
for i in range(10,100):
    x=i%10
    y=i//10
    num=0
    for j in range(2,i):
      if i%j==0:
            num+=1
    if not num:
      zh.append(i)
print(zh)

yesterday0931 发表于 2018-7-28 19:33:31

def is_prime_number(n):
    if n==1:
      return True
    elif n<=0 or n==2:
      return False
    else:
      for i in range(2, n):
            if n % i == 0:
                return False
      else:
            return True
prime_number=[]
for y in range(0,10):
    if is_prime_number(y):
      for x in range(0, 10):
            z = x * 10 + y
            if is_prime_number(x) and is_prime_number(z):
                prime_number.append(z)
            if z == y:
                prime_number.append(y)
print(prime_number)
print(len(prime_number))

1422293891@qq.c 发表于 2018-7-28 21:15:32

import math;
   
def isPrime( num):
   
    ##两个较小数另外处理
    if (num == 2 or num ==3):
      return 1;
    if(num%6 != 1 and num%6 !=5):
      return 0;
    temp = math.sqrt(num);
    i = 5;
    while(i < temp):
      if((num % i == 0) or (num % (i+2) == 0)):
            i+=6;
            return 0;
    return 1;
      
      

list_data = range(10,100);
list_prime = [];
counter = 0;
for number in list_data:
    if((isPrime(number) == 1) and (isPrime(number/10) == 1)and(isPrime(number%10) == 1)):
      list_prime.append(number);
      counter += 1;
print ("0~100共计数字"+counter+"个,分别是:");
for data in list_prime:
    print ( data);
         
程序还在调试中,还没有出结果

ErTian 发表于 2018-7-28 21:23:35

ErTian 发表于 2018-7-25 01:06
答案

class Test:
    def __init__(self,nums):
      self.nums=nums

    def num_to_list(self,nums):
      num_list = list(str(nums))
      return num_list

    def prime_num(self,num_list):
      j = 2
      #print(num_list)
      for i in range(len(num_list)):
            if num_list == '1' or num_list == '0':
                num_list = -1
            while j <= int(num_list)-1:
                if int(num_list) % j == 0:
                  num_list = -1
                  break
                else:
                  j +=1
      #print(num_list)
      return num_list

    def list_to_num(self,prime):
      #print(prime)
      if -1 in prime:
            pass
      else:
            result = int("".join(prime))
            print(result)


    def main(self):
      for i in range(10,self.nums):
            num_list = self.num_to_list(i)
            prime = self.prime_num(num_list)
            result = self.list_to_num(prime)

results = Test(33)
results.main()

子沙 发表于 2018-7-29 14:21:42

for i in range(10,100):
    n=0
    for j in range(2,i):
      if i%j!=0:
            n=n+1
    if n==i-2:
      m=0
      for k in str(i):
            if k in'2357':
                m+=1
      if m==2:
            print(i,end=' ')

说语 发表于 2018-7-29 17:28:24

感谢鼓励!

claws0n 发表于 2018-7-29 18:09:30

prime_digits =

for n in range(20,80):
    if ((n // 10) in prime_digits) and ((n % 10) in prime_digits):
      for i in range(2, n):
            if n % i == 0:
                break
      else:
            print(n)

这是针对这道题写的.由于十位数与个位数都必须是质数,只需考虑{2,3,5,7}的排列组合,只有 16 个元素。当然,范围也可以缩小到 20~80

这里要继续判断这些数是否为质数。方法简单,所以不考虑写成函数。

喂猪专业户 发表于 2018-7-31 16:44:14

喂猪专业户 发表于 2018-7-25 09:54
自己写了一个,提示最后一个判断是int和nonetype做与运算,问题出在哪

原来如此,已经解决了

学学看看 发表于 2018-8-9 20:38:56

pushpush 发表于 2018-10-17 01:06:54

list1 =
for i in list1:
    for j in list1:
            digit = i * 10 + j
            flag = 0
            for p in range(2, digit):
                if digit % p == 0:
                  flag = 1
            if flag == 0:
                print digit

foxiangzun 发表于 2019-2-14 19:28:21

def isPrime(num) :
      flag = 0
      for i in range(2, int(pow(num, 0.5)) + 1) :
                if num % i == 0 :
                        flag += 1
      if flag == 0 :
                return True
      else :
                return False

def getNum() :
      list1 =
      for i in list1[:] :
                if (not isPrime(i)) or (not isPrime(i // 10)) or (not isPrime(i % 10)) :
                        list1.remove(i)
      print(list1)

getNum()

answer如约 发表于 2019-2-15 11:42:01

本帖最后由 answer如约 于 2019-2-15 12:02 编辑

思路1:一个是 生成两位数的质数 判断 十位各位是否为质数
思路2: 找出10以内的质数,两个质数组合成为两位数,判断组合后数字在不在100以内的质数表中


def _odd_(n):                # 质数生成函数
    prime = []
    prime1 = []
    for i in range(n+1):
      prime.append(True)
    for i in range(2,n+1):
      if prime:
            prime1.append(i)
            
            j = i+i
            while j<= n:
                prime = False
                j += i
    return prime1


_list_ = []
for i in _odd_(10):         #将不重复的质数组合成两位数
    for j in _odd_(10):
      _list_.append(i*10+j)
         
      
for i in _list_:       #找出组合后为质数的两位数
   if i in _odd_(100) :
      print(i)
      

小贤啊哦 发表于 2020-6-16 19:55:55

def fun128():
    temp=[]
    for i in range(2,101):
      flag=1
      for j in range(2,i//2+1):
            if i%j==0:
                flag=0
                break
      if flag:
            temp.append(i)
    for k in temp:
      a=k//10
      b=k%10
      if a in temp and b in temp:
            print(k,end=' ')
23 37 53 73
页: 1 2 [3]
查看完整版本: Python:每日一题 190