习题12

作者: 小董不太懂 | 来源:发表于2019-08-09 11:49 被阅读0次
  • 判断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

相关文章

网友评论

      本文标题:习题12

      本文链接:https://www.haomeiwen.com/subject/xpucjctx.html