鱼C论坛

 找回密码
 立即注册
查看: 11813|回复: 117

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

  [复制链接]
发表于 2017-3-27 19:44:58 | 显示全部楼层 |阅读模式

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

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

x
题目判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788 @lumber2388779   
点我上车  

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-27 19:45:29 | 显示全部楼层
@lumber2388779 @ooxx7788 @jerryxjr1220 @冬雪雪冬
来吧!新题目来了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2017-3-27 19:48:22 | 显示全部楼层
  1. h = 0
  2. leap = 1
  3. from math import sqrt
  4. from sys import stdout
  5. for m in range(101,201):
  6.     k = int(sqrt(m + 1))
  7.     for i in range(2,k + 1):
  8.         if m % i == 0:
  9.             leap = 0
  10.             break
  11.     if leap == 1:
  12.         print('%-4d' % m)
  13.         h += 1
  14.         if h % 10 == 0:
  15.             print('')
  16.     leap = 1
  17. print('The total is %d' % h)
复制代码

等待被大佬们指点!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-3-27 21:10:43 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-3-27 21:15 编辑
  1. def prime(s, e):
  2.     flag = 1
  3.     count = 0
  4.     for i in range(s, e, 2):
  5.         for j in range(2, int(i ** 0.5)+1):
  6.             if i % j == 0:
  7.                 flag = 0
  8.                 break
  9.         if flag:
  10.             print('{:>{}}'.format(i, len(str(e))), end=' ')
  11.             count += 1
  12.             if count == 10:
  13.                 print()
  14.                 count = 0
  15.         else:
  16.             flag = 1

  17. if __name__ == '__main__':
  18.     prime(101, 200)
  19.     print()
  20.     prime(1, 2000)
复制代码

输出
  1. 101 103 107 109 113 127 131 137 139 149
  2. 151 157 163 167 173 179 181 191 193 197
  3. 199
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-3-27 21:53:42 | 显示全部楼层
  1. list1=[]
  2. list2=[]
  3. count=0
  4. for i in range(101,201):
  5.     for j in range(2,int(i**0.5)+1):
  6.         if i%j==0:
  7.             list1.append(i)
  8. for m in range(101,201):
  9.     list2.append(m)
  10. for a in list2:
  11.     if a not in list1:
  12.         count+=1
  13.         print(a,end="  ")
  14. print('总计%d个素数' % count)
复制代码


  1. 101  103  107  109  113  127  131  137  139  149  151  157  163  167  173  179  181  191  193  197  199  总计21个素数
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-3-27 21:56:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 21:57:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 22:39:40 | 显示全部楼层
新手·ing 发表于 2017-3-27 21:56
谢谢支持
点我上车

上车???怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 15:24:48 | 显示全部楼层
  1. primenum = []
  2. notprimenum = []
  3. for i in range(101,201):
  4.     maxnum = int(i**0.5)
  5.     minnum = 2
  6.     flag = True
  7.     while True:
  8.         if i%maxnum == 0:
  9.             flag = False
  10.             break
  11.         elif i%minnum == 0:
  12.             flag = False
  13.             break
  14.         elif minnum == maxnum or (minnum+1) == maxnum:
  15.             flag = True
  16.             break
  17.         else:
  18.             maxnum -= 1
  19.             minnum += 1
  20.     if flag:
  21.         primenum.append(i)
  22.     else:
  23.         notprimenum.append(i)

  24. print('范围101-200中素数有:',primenum)
  25. print('非素数有:',notprimenum)
复制代码


结果输出
  1. 范围101-200中素数有: [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
  2. 非素数有: [102, 104, 105, 106, 108, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 130, 132, 133, 134, 135, 136, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 164, 165, 166, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 180, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 194, 195, 196, 198, 200]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-3-28 17:27:21 | 显示全部楼层
xunzhao 发表于 2017-3-27 22:39
上车???怎么弄

点击链接,可以订阅,也可以一起出题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-28 17:28:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:40:35 | 显示全部楼层
这个偷个懒,不写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-24 18:26:06 | 显示全部楼层
只能想到循环求余,但是数字来到 7位数就跑不动了, 应该是嵌套循环的锅
  1. def find_prime(a,b):
  2.     """输入两参数,寻找[a,b]范围内的质数,目前支持从3开始往后的整数,a>b就不鸟你了"""
  3.     nums = []
  4.     for i in range(a,b+1):
  5.         sqrt_i = int(i**0.5) + 1
  6.         for j in range(2,sqrt_i):
  7.             if i%j==0:
  8.                 break
  9.             elif j == sqrt_i - 1:
  10.                 nums.append(i)
  11.             else:
  12.                 continue
  13.     print(nums)
  14.     print("共有 %d 个" % len(nums))

  15. find_prime(101,200)
  16. #结果
  17. [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
  18. 共有 21 个
复制代码

找到一行的代码,每一个要判断的数都形成求余的列表,用成员关系判断,真厉害
不过没有break的机制,循环的次数估计要多很多
  1. print([p for p in range(101, 201) if 0 not in [ p%d for d in range(2, int(p**0.5)+1)]])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 11:18:09 From FishC Mobile | 显示全部楼层
a=0
for i in range(101,201):
     for j in range(1,i+1):
            if i%j==0:
                 a+=1
      if a==2:
           print(i)
     a=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 17:55:21 | 显示全部楼层
  1. import math
  2. count = 0       #记素数的个数
  3. n = 0           #记数排版
  4. for i in range(101,200):
  5.     s = int(math.sqrt(i))
  6.     isPrime = True
  7.     for j in range(2,s+1):
  8.         if i%j == 0:
  9.             isPrime = False
  10.             break
  11.     if isPrime == True:
  12.         print(i,'\t',end = '')
  13.         n += 1
  14.         count += 1
  15.     if n == 5:
  16.         n = 0
  17.         print()
  18. print('\nTotal:',count)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 22:04:13 | 显示全部楼层
  1. i = 101
  2. while i<=200:
  3.     n = 2
  4.     r = 0
  5.     while n<i**0.5:
  6.         if i%n == 0:
  7.             r = 1
  8.             break
  9.         n += 1
  10.     if r==0:
  11.         print (i)
  12.     i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 15:15:55 | 显示全部楼层
本帖最后由 抑痒指 于 2017-6-10 15:19 编辑
  1. import math

  2. def fuction1(a):
  3.     '''判断a是否是素数,若是,返回1,否则返回0'''
  4.     i = int(math.sqrt(a))
  5.     j = 1
  6.     for z in range(1,i+1):
  7.         for x in range(i,a):
  8.             if z*x ==a:
  9.                 return 0
  10.     return 1

  11. '''
  12. 测试函数1代码
  13. print(fuction1(101))
  14. '''
  15. j=0
  16. for i in range(101,201):
  17.     if fuction1(i):
  18.         j += 1
  19. print(j)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 11:52:35 | 显示全部楼层
  1. def prime_number(x,y):
  2.     result = []
  3.     for i in range(x,y+1):
  4.         if i == 2:
  5.             result.append(i)
  6.             continue
  7.         for j in range(2,i):
  8.             if i%j == 0:
  9.                 break
  10.         else:
  11.             result.append(i)
  12.     return result

  13. if __name__ == '__main__':
  14.     print(prime_number(101,200))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
新手·ing + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2017-8-13 22:28:49 | 显示全部楼层
  1. import math

  2. def getPrime():
  3.    
  4.     prime_list = []
  5.     count = 0
  6.     for i in range(101,201):
  7.         flag = 0
  8.         for j in range(2,int(math.sqrt(i)+1)):
  9.             if i % j == 0:
  10.                 flag = 1
  11.          
  12.         if flag == 0:
  13.             count += 1
  14.             prime_list.append(i)

  15.     return prime_list,count

  16.         
  17. p,c = getPrime()

  18. print('101-200之间总共有%d个素数' % c)
  19. print(*p)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 21:04:53 | 显示全部楼层
本帖最后由 木一 于 2017-8-20 21:08 编辑
  1. import math as m
  2. n = 0
  3. list1 = []
  4. for i in range(101,201):
  5.     for a in range(2,int(m.sqrt(i)) + 1):
  6.         if i % a != 0:
  7.             s = 0
  8.         else:
  9.             s = -1
  10.             break
  11.     if s == 0:
  12.         n += 1
  13.         list1.append(i)
  14. print('共有%d个素数'%n)
  15. print('它们分别是:')
  16. for each in list1:
  17.     print(each,end = ' ')

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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