鱼C论坛

 找回密码
 立即注册
查看: 1760|回复: 80

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

[复制链接]
最佳答案
946 
发表于 2018-3-7 09:02:43 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-3-8 19:39 编辑

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

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

题目:
对于质数大家都很熟悉,从中可以发现某些质数乘以10再加1得到的仍然是质数,例如3, 3 * 10 + 1 = 31, 31仍是质数。当然这样的数还有不少,求出100以内这样的质数。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
548 
发表于 2018-3-7 09:38:16 | 显示全部楼层
  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. for n in range(100):
  11.     if isPrime(n) and isPrime(10*n+1):
  12.         print(n)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
3 
发表于 2018-3-7 10:05:16 | 显示全部楼层
def isPrime(num):
    if num <=1:
        return False
    else:
        for i in range(2,num):
            if num%i == 0:
                return False
            else:
                return True


for i in range(2,100):
    if(isPrime(i)):
        if(isPrime(i*10+1)):
            print('%d 是质数且乘以10再加1得到的 %d 的仍然是质数'%(i,i*10+1))


3 是质数且乘以10再加1得到的 31 的仍然是质数
5 是质数且乘以10再加1得到的 51 的仍然是质数
7 是质数且乘以10再加1得到的 71 的仍然是质数
9 是质数且乘以10再加1得到的 91 的仍然是质数
11 是质数且乘以10再加1得到的 111 的仍然是质数
13 是质数且乘以10再加1得到的 131 的仍然是质数
15 是质数且乘以10再加1得到的 151 的仍然是质数
17 是质数且乘以10再加1得到的 171 的仍然是质数
19 是质数且乘以10再加1得到的 191 的仍然是质数
21 是质数且乘以10再加1得到的 211 的仍然是质数
23 是质数且乘以10再加1得到的 231 的仍然是质数
25 是质数且乘以10再加1得到的 251 的仍然是质数
27 是质数且乘以10再加1得到的 271 的仍然是质数
29 是质数且乘以10再加1得到的 291 的仍然是质数
31 是质数且乘以10再加1得到的 311 的仍然是质数
33 是质数且乘以10再加1得到的 331 的仍然是质数
35 是质数且乘以10再加1得到的 351 的仍然是质数
37 是质数且乘以10再加1得到的 371 的仍然是质数
39 是质数且乘以10再加1得到的 391 的仍然是质数
41 是质数且乘以10再加1得到的 411 的仍然是质数
43 是质数且乘以10再加1得到的 431 的仍然是质数
45 是质数且乘以10再加1得到的 451 的仍然是质数
47 是质数且乘以10再加1得到的 471 的仍然是质数
49 是质数且乘以10再加1得到的 491 的仍然是质数
51 是质数且乘以10再加1得到的 511 的仍然是质数
53 是质数且乘以10再加1得到的 531 的仍然是质数
55 是质数且乘以10再加1得到的 551 的仍然是质数
57 是质数且乘以10再加1得到的 571 的仍然是质数
59 是质数且乘以10再加1得到的 591 的仍然是质数
61 是质数且乘以10再加1得到的 611 的仍然是质数
63 是质数且乘以10再加1得到的 631 的仍然是质数
65 是质数且乘以10再加1得到的 651 的仍然是质数
67 是质数且乘以10再加1得到的 671 的仍然是质数
69 是质数且乘以10再加1得到的 691 的仍然是质数
71 是质数且乘以10再加1得到的 711 的仍然是质数
73 是质数且乘以10再加1得到的 731 的仍然是质数
75 是质数且乘以10再加1得到的 751 的仍然是质数
77 是质数且乘以10再加1得到的 771 的仍然是质数
79 是质数且乘以10再加1得到的 791 的仍然是质数
81 是质数且乘以10再加1得到的 811 的仍然是质数
83 是质数且乘以10再加1得到的 831 的仍然是质数
85 是质数且乘以10再加1得到的 851 的仍然是质数
87 是质数且乘以10再加1得到的 871 的仍然是质数
89 是质数且乘以10再加1得到的 891 的仍然是质数
91 是质数且乘以10再加1得到的 911 的仍然是质数
93 是质数且乘以10再加1得到的 931 的仍然是质数
95 是质数且乘以10再加1得到的 951 的仍然是质数
97 是质数且乘以10再加1得到的 971 的仍然是质数
99 是质数且乘以10再加1得到的 991 的仍然是质数

点评

计算有误,如51=3*17不是质数  发表于 2018-3-8 19:54
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
5 
发表于 2018-3-7 10:10:34 | 显示全部楼层
本帖最后由 LargeCat 于 2018-3-7 10:12 编辑
  1. def is_Z(n):
  2.     for i in range(2, n):
  3.         if n%i==0:
  4.             return False
  5.     return True

  6. for i in range(2, 100):   #100以内我理解是不包括100, 如包括的话这里改成 range(2,101), 不影响程序.
  7.     if is_Z(i*10+1):
  8.         print(i, '*10+1=', i*10+1)
复制代码


结果:
  1. 3 *10+1= 31
  2. 4 *10+1= 41
  3. 6 *10+1= 61
  4. 7 *10+1= 71
  5. 10 *10+1= 101
  6. 13 *10+1= 131
  7. 15 *10+1= 151
  8. 18 *10+1= 181
  9. 19 *10+1= 191
  10. 21 *10+1= 211
  11. 24 *10+1= 241
  12. 25 *10+1= 251
  13. 27 *10+1= 271
  14. 28 *10+1= 281
  15. 31 *10+1= 311
  16. 33 *10+1= 331
  17. 40 *10+1= 401
  18. 42 *10+1= 421
  19. 43 *10+1= 431
  20. 46 *10+1= 461
  21. 49 *10+1= 491
  22. 52 *10+1= 521
  23. 54 *10+1= 541
  24. 57 *10+1= 571
  25. 60 *10+1= 601
  26. 63 *10+1= 631
  27. 64 *10+1= 641
  28. 66 *10+1= 661
  29. 69 *10+1= 691
  30. 70 *10+1= 701
  31. 75 *10+1= 751
  32. 76 *10+1= 761
  33. 81 *10+1= 811
  34. 82 *10+1= 821
  35. 88 *10+1= 881
  36. 91 *10+1= 911
  37. 94 *10+1= 941
  38. 97 *10+1= 971
  39. 99 *10+1= 991
复制代码

点评

题目是本身是质数,乘10加1还是质数,而你的答案4不是质数  发表于 2018-3-8 19:55
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
190 
发表于 2018-3-7 10:23:05 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2018-3-8 19:53 编辑
  1. def Num(num):
  2.     for j in range(2, int(num**0.5+1)):
  3.         if num%j == 0:
  4.             return False
  5.     else:
  6.         return True
  7.    
  8. List = [i for i in range(2, 101) if Num(i) and Num(10*i+1)]
复制代码

点评

1不是质数  发表于 2018-3-8 19:56
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
7 
发表于 2018-3-7 10:26:21 | 显示全部楼层
  1. '''
  2. 对于质数大家都很熟悉,从中可以发现某些质数乘以10再加1得到的仍然是质数,
  3. 例如3, 3 * 10 + 1 = 31, 31仍是质数。
  4. 当然这样的数还有不少,求出100以内这样的质数。
  5. '''
  6. def isPrime(n):
  7.     if n<2:
  8.         return False
  9.     elif n==2:
  10.         return True
  11.     else:
  12.         for i in range(2,n):
  13.             if n%i==0:
  14.                 return False
  15.             else:
  16.                 return True

  17. for n in range(1,100):
  18.     if isPrime(n):
  19.         if isPrime(n*10+1):
  20.             print(n)
复制代码

点评

判断质数有误  发表于 2018-3-8 19:58
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-3-7 10:45:13 | 显示全部楼层
def is_prime(pp):
    for i in range(2, pp):
        if pp % i == 0:
            return False
    else:
        return pp
def main():
    a = []

    for n in range(1, 101):
       if is_prime(n):
           if is_prime(n * 10 + 1):
               print(n)

if __name__ == '__main__':
    main()
               


点评

1不是质数  发表于 2018-3-8 19:58
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 2018-3-7 14:57:19 | 显示全部楼层
num = []
new_num = []
i=2
for i in range(2,100):
   j=2
   for j in range(2,i):
      if not i%j:
         break
   else:
      num.append(i)

for x in range(len(num)):
    for y in range(2,num[x]*10+1):
        if (num[x]*10+1)%y == 0:
            new_num.append(num[x])
            break

print(sorted(set(num).difference(new_num)))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-3-7 15:17:11 | 显示全部楼层
def zs(n):
    list1 =[]
    for i in range(1,n):
        for j in range(1,n):
            if i*j == n:
                list1.append(i)
    return list1
for num  in range(2,101):
    if bool(zs(num)) == False:
        if bool(zs(num*10+1)) == False:
            print num

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
4 
发表于 2018-3-7 15:20:03 | 显示全部楼层
本帖最后由 Chase_Kas 于 2018-3-7 15:22 编辑
  1. def isprime(a):
  2.     for i in range(2, a):
  3.         if a/i == a//i:
  4.             return False
  5.     return True

  6. print([x for x in range(2, 101) if isprime(x) if isprime(x*10+1)])

  7. '''结果:[3, 7, 13, 19, 31, 43, 97]'''
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 2018-3-7 15:30:28 | 显示全部楼层
list1=[]
list2=[]
for i in range(0,1002):
    for j in range(2,1002):
        if i==j:
            list2.append(i)
        elif i%j==0:
            break
            
for i in list2:
    if (i*10+1) in list2:
        list1.append(i)
        
print(list1)



结果:
[3, 7, 13, 19, 31, 43, 97]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
12 
发表于 2018-3-7 15:31:39 | 显示全部楼层
import math

def get_primes(input_list):
    return (element for element in input_list if is_prime(element))

# 下面是 is_prime 的一种实现...

def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False
        return True
    return False
   
result1 = get_primes([i for i in range(101)])
list1 = list(result1)
result2 = get_primes([i for i in range(971)])
list2 = list(result2)
for i in list1:
        if (i * 10 + 1) in list2:
                print(i)

点评

差97  发表于 2018-3-8 20:02
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-3-7 15:44:30 | 显示全部楼层
num = []
i=2

for i in range(2,100):
    j=2
    for j in range(2,i):
        if(i%j==0):
            break
    else:
        num.append(i)
print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2018-3-7 16:13:44 | 显示全部楼层
  1. def is_prime(n):
  2.     for i in range(2, n):
  3.         if n % i == 0:
  4.             return False
  5.     else:
  6.         return True

  7. for d in range(2, 100):
  8.     if is_prime(d):
  9.         if is_prime(d * 10 + 1):
  10.             print(d, end=' --> ')
  11.             print(d * 10 + 1)
复制代码


结果:
3 --> 31
7 --> 71
13 --> 131
19 --> 191
31 --> 311
43 --> 431
97 --> 971

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1287 
发表于 2018-3-7 16:19:58 | 显示全部楼层
  1. def judge(n):
  2.     for i in range(2,n//2+1):
  3.         if not (n % i):
  4.             return False
  5.     else:
  6.         return True

  7. lst = [x for x in range(2,100) if judge(x)]
  8. print([x for x in lst if judge(10*x+1)])
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
7 
发表于 2018-3-7 16:28:51 | 显示全部楼层
本帖最后由 纳兰小寒 于 2018-3-8 11:37 编辑
  1. def get_prime(x):
  2.     for a in range(1,100):
  3.         if prime(a):
  4.             x = a * 10 + 1
  5.             if prime(x):
  6.                 print(a)
  7.         
  8. def prime(x):
  9.     y = int(x ** 0.5)
  10.     if x % 2 == 0:
  11.         return False
  12.     for a in range(2,y + 1):
  13.         if x % a == 0:
  14.             return False
  15.     else :
  16.         return True
  17.             

  18. num = int(input('请输入想要判断的数字范围最大值为:'))
  19. get_prime(num)
复制代码

点评

1不是质数  发表于 2018-3-8 20:04
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2018-3-7 17:08:01 | 显示全部楼层
  1. def isprime(n):
  2.     for i in range(2,n//2):
  3.         if n%i == 0:
  4.             return False
  5.     else:
  6.         return True
  7. primeList = [i for i in range(2,100) if isprime(i)]
  8. newPrimeList = [each for each in primeList if isprime(each*10+1)]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-3-7 17:24:32 | 显示全部楼层
# num = int(input('请输入一个大于1的整数:'))

def isprime_number(n):#判断是否是质数
    m = n
    i = 2
    while(i < m):
        if n % i == 0:
            return 0
            break
        else:
            m = n // i
            i += 1
    return 1

def find_prime_number(num):#找到符合要求的质数
    for n in range(2, num):
        if isprime_number(n) and isprime_number(n * 10 + 1):
            print(n, end = ' ')

num = 100

if __name__ == '__main__':
    print('%d以内乘以10加1仍为质数的质数有:' % num)
    find_prime_number(num)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2018-3-7 17:57:28 | 显示全部楼层
  1. import math

  2. def fun(num):
  3.     for i in range(2, int(math.sqrt(num) + 1)):
  4.         if not num % i:
  5.             return False
  6.     else:
  7.         return True

  8. for i in range(1,10):
  9.     if fun(i):
  10.         if fun(10 * i + 1):
  11.             print(10 * i + 1)
复制代码

点评

可能对题意理解有误,我帮你修改了,但仍把1算出来了  发表于 2018-3-8 20:07
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2018-3-7 18:19:42 | 显示全部楼层
  1. def isprime(n):
  2.     if n == 0 or n == 1:
  3.         return False
  4.     elif n == 2 or n == 3:
  5.         return True
  6.     elif n > 3:
  7.         for i in  range(3,n):
  8.             if n%i == 0:
  9.                 return False
  10.         else:
  11.             return True


  12. def newprime(n):
  13.     if isprime(n):
  14.         i = n*10 + 1
  15.         if isprime(i):
  16.             print(n)

  17. for i in range(100):
  18.     newprime(i)
复制代码

3
4
7
13
19
31
43
97

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-9-25 00:29

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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