雪人爱晒大太阳 发表于 2018-3-8 10:23:54

想的思路很快,但是编程还是花了15分钟左右,感觉自己的编程能力还是要加强。。 关于质数的定义那一块可以有很多种方法,我还是选的一种感觉最笨但是很好理解的方法。。
#先定义质数的判断函数
def identify_prime_number(x):
    flag = 1
    #判断x是否是质数
    for k in range(2,x):
      if x%k == 0 :
            flag = 0
            break
    return flag

special_prime_number = []

def identify_special_prime_number(x):
    flag2 = 0
    flag1 = identify_prime_number(i)
    if flag1 == 1:
      i_change = i*10+1
      flag2 = identify_prime_number(i_change)
    return flag2

special_prime_number = []

for i in range(1,101):
    flag_prime_number = identify_special_prime_number(i)
    if flag_prime_number == 1:
      special_prime_number.append(i)
            
#special_prime_number.pop(1)
special_prime_number = special_prime_number
print(special_prime_number)
#            

jiamin_2010 发表于 2018-3-8 10:40:17

list1 = []
i =2
for i in range(2,101):
    j =2
    for j in range(2,i):
      if i%j==0:
            break
      
    else:
      k =2
      for k in range(2,(i*10+1)):
            if (i*10+1) % k ==0:
            
                break
      else:
            list1.append(i*10+1)
print(list1)
      写的不好 求大神指点一下

nlnlchb 发表于 2018-3-8 13:21:54

{:10_250:}{:10_250:}{:10_250:}{:10_250:}

victor.xu 发表于 2018-3-8 14:30:55

定义一个求质数的函数,分别求出100,1000以内的质数,构成lis1和lis2,lis1中的元素乘10+1后,判断是否在lis2中。
def find_prime(n):
    prime =
    for divident in range(5, n, 2):
      divisor = 2
      count = 0
      j = int(divident ** 0.5)
      while divisor <= j:
            if divident % divisor == 0:
                divisor += 1
                count += 1
            else:
                divisor += 1
      if count == 0:
            prime.append(divident)
    return prime
lis1 = find_prime(100)
lis2 = find_prime(1000)
result = []
temp =
for j in temp:
    if j in lis2:
      result.append(j)
print(result)

大硕硕 发表于 2018-3-8 15:58:39

import math as m

def isPrime(x):
    if x == 2 or x == 3:
      return 1;
    if x % 6 != 5 and x % 6 != 1:
      return 0;
    temp = int(m.sqrt(x))
    for each in range(5,temp,6):
      if x % each == 0 or x % (each + 7) == 0:
            return 0;
    return 1;

for i in range(2,100):
    if isPrime(i) and isPrime(i*10+1):
      print(i)

3
7
13
19
25
31
37
43
49
61
79
91
97

溯影 发表于 2018-3-8 16:01:13

import math
def is_prime(number):
        if number == 1:
                return False
        if number == 2:
                return True
        for i in range(2,int(math.sqrt(number)+1)):
                if number % i == 0:
                        return False

        return True

if __name__ == '__main__':
        list1 =
        for i in list1:
                if is_prime(i*10 + 1):
                        print(i)
               

溯影 发表于 2018-3-8 16:02:33

溯影 发表于 2018-3-8 16:01



运行结果:
3
7
13
19
31
43
97

***Repl Closed***

fan1993423 发表于 2018-3-8 16:25:28

m=[]
l=[]
for a in range(2,101):
    if a==2:
       m.append(a)
    else:
      if 0 not in :
                m.append(a)
for n in m:
    if 0 not in [(10*n+1)%c for c in range(2,10*n)]:
      l.append(n)
print(l)


               

sukiwhip 发表于 2018-3-8 16:53:54

本帖最后由 sukiwhip 于 2018-3-8 16:56 编辑

prime_number = []
prime_number2 = []

for i in range(1,101):#先拿出一百以内的质数
   c = 0
   for j in range(1,i+1):
      b = i % j
      if b == 0 :
         c += 1
   if c == 2:
      prime_number.append(i)

long = len(prime_number)

for k in range(0,long):
   c = 0
   e = prime_number*10 + 1#用来判断的数
   for l in range(1,e + 1):#再判断一次质数的条件
      d = e % l
      if d == 0 :
         c += 1
   if c == 2:
      prime_number2.append(prime_number)

print('这样的质数还有:' + str(prime_number2))


哎。。。判断一个数是不是质数应该先打包成函数的。。。下次再改进

scchapter 发表于 2018-3-8 17:57:35

#质数
for j in range(2,100):
    j1=j*10+1
   
    for i in range(2,j1):
      
      if j1%i==0:
            break
    else :
            print(j)
      

solomonxian 发表于 2018-3-8 18:24:24

本帖最后由 solomonxian 于 2018-3-8 18:25 编辑

题目多了感觉已经做过几遍了,现在速度比以前快多了{:10_256:}
def fun(n=100):
    prime = [i for i in range(2, 10*n+2)
             if 0 not in (i%j for j in range(2, int(i**0.5)+1))]
    return
还有个给力的工具库
import gmpy2

def fun2(n=100):
    return ))]
人这么多,我发我的答案,楼主你直接看对不对好了,用不着测代码

°蓝鲤歌蓝 发表于 2018-3-8 20:04:02

°蓝鲤歌蓝 发表于 2018-3-7 10:23


忘记了哈哈。

冬雪雪冬 发表于 2018-3-8 20:37:35

评分结束。
说说我的思路。
先建立一个列表,存放1000以内的所有质数(100以内最大质数*10+1不会大于1000).
由于有了质数列表,不用计算所有的被除数,只要看看能否被列表中小于等于被测数平方根的质数整除就可以了。
后面就简单了,看看质数*10+1在不在这个列表中,如果在就输出或放到一个新列表中统一输出。
lst1 =
for i in range(3, 1000, 2):
    j = 0
    while lst1 * lst1 <= i:
      if i % lst1 == 0:
            break
      j += 1
    else:
      lst1.append(i)

lst2 = []
for i in lst1:
    if i > 100:
      break
    if i * 10 + 1 in lst1:
      lst2.append(i)

print(lst2)

fengyutianshang 发表于 2018-3-8 21:24:13

import math

def IsPrime(num):
    tem = math.sqrt(num)
    if num ==2 or num ==3:
      return 1
    if num % 6 !=1 and num % 6 !=5:
      return 0
    for each in range(5,int(tem)+1,6):
      if num % each == 0 or num % (each + 2) == 0:
            return 0;
    return 1

for n in range(2,100):
    if IsPrime(num = n) and IsPrime(num = 10*n + 1):
      print(n)


3
7
13
19
31
43
97

tsembrace 发表于 2018-3-8 21:25:56

'''
对于质数大家都很熟悉,从中可以发现某些质数乘以10再加1得到的仍然是质数,
例如3, 3 * 10 + 1 = 31, 31仍是质数。
当然这样的数还有不少,求出100以内这样的质数。
'''
def isPrime(n):
    if n<2:
      return False
    elif n==2:
      return True
    else:
      for i in range(2,n):
            if n%i==0:
                return False
      return True

for n in range(1,100):
    if isPrime(n):
      if isPrime(n*10+1):
            print(n)

checkily 发表于 2018-3-8 22:07:56

本帖最后由 checkily 于 2018-3-8 22:22 编辑

def isprime(n):
    for i in range(2, n):
      if not n%i:
            return False
    else:
      return True

for i in range(2, 101):
    if isprime(i) and isprime(i*10+1):
      print(i,end='')

xiaobiubiu 发表于 2018-3-9 00:14:19

def ZhiShu(n):
    if n == 2:
      return 1
    else:
      for i in range(2,n):
            if n % i == 0:
                return 0
      return 1
               
            
            

for a in range(1,101):
    if ZhiShu(a) == 1:
      s = a*10+1
      if ZhiShu(s) == 1:
            print(a)

pillar 发表于 2018-3-9 10:49:33

本帖最后由 pillar 于 2018-3-9 12:41 编辑

"方法一:"
def Daily_practice_159(n):   
    a = n//2      #   对该数除二取整
    for i in range(2,a+2):
      "判断质数只需判断这个数的前二分子一就可以了"
      if n%i ==0:
            break
    else:
      returnn
   

for n in range (2,100):
    if Daily_practice_159(n) and Daily_practice_159(n*10+1):
      print(n)
#            
Daily_practice_159(n)


“方法二:”
def Daily_practice_159():

    for i in range(2,100):
      j = 2
      a = i//2
      for j in range(2,a+2):
#      while j <= a+1:
            if i%j == 0:               
                break
#      j += 1
      else:
            b=i*10+1
            k=2
            for k in range(2,b//2+1):
                if b%k == 0:
                  break
#            k += 1
            else:
                print(i)            
         
            
Daily_practice_159()   

lyjlyj 发表于 2018-3-9 17:35:14

def prime_num(num):
    n = 2
    while n <= (num//2):
      if num % n == 0:
            return False
      n += 1
    return True


def fishc159(num):
    if prime_num(num):
      temp = num * 10 +1
      if prime_num(temp):
            print num

for i in range(1,100):
    fishc159(i)

solomonxian 发表于 2018-3-9 18:57:28

冬雪雪冬 发表于 2018-3-8 20:37
评分结束。
说说我的思路。
先建立一个列表,存放1000以内的所有质数(100以内最大质数*10+1不会大于1000 ...

你这是用了质因数,效率比一路循环上去高啊,
之前jerry说有个最快的方法,忘了
我就顾着写得快···话说评分就刚好停我那吗{:10_250:}
页: 1 2 [3] 4
查看完整版本: Python:每日一题 159