-
判断101-200之间所有的素数,并输出
程序分析:
一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。
先看看我的解法
- 解法一
for i in range(101,201,1):
for j in range(2,i):
# print('{} % {}'.format(i,j))
if i%j == 0:
break
else:
print(i)
输出结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
这道题目很有趣的一点是出现了for...else的用法,具体请参考:https://blog.csdn.net/CSND_Ayo/article/details/70341484
- 程序分析:
若i是101的时候,执行第二个for循环,发现101不符合if条件,便无法执行break语句,不执行break语句,就无法跳出第二个for循环,那么也就意味着第二个for循环是正常结束的,故执行else语句并输出i的值。
若i是102的时候,执行第二个for循环,发现满足if条件,然后就执行了break跳出第二个for循环,自然就不会再去执行else语句了,而是直接跳到第一个for循环继续执行。
-
解法二
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
import math
h = 0
for i in range(101,201):
for j in range(2,int(math.sqrt(i))+1):
if i%j == 0:
break
else:
print(i,end='\t')
h += 1
print('\n共有素数{}个'.format(h))
输出结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
共有素数21个
- 解法三
import math
p=range(101,201)
aList=list(p)#list(p)返回的是int类型元素的数列
for i in range(101,201):
for j in range(2,int(math.sqrt(i)+1)):
if i % j==0:
aList.remove(i)
break
print(aList)
print('总数为:%d'%len(aList))
输出结果:
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
总数为:21
程序解析:
先产生101到200之间元素类型为int型的数列,若i为101不符合if条件,返回for循环,继续执行102,102满足if条件,执行aList.remove(102),就是去掉列表中的102,然后break,终止第二个for循环,接着执行102....第一个for循环执行完毕后输出aList
网友评论