python100以内的素数之和是多少,python输出1000以内的素数以及这些素数之和
今天做了一道用for循环求100以内素数之和的题,发现自己在Python语法上遇到了一个问题:这还有谁的?在这里做个记录,以防你下次再做错事。
题目很简单:100以内素数之和
求100以内所有质数之和并输出。
质数是大于1的整数,只能被1和它本身整除。可以逐个判断100以内的每个数是否是质数,然后求和。一开始,我的程序是这样的:
对于range (2,100)中的I,Sum=0:#对于range(2,I)中的J,搜索范围为2-99:if(I % J==0):break else:sum=I print(sum)但是,输出时sum等于66705!
这显然是错误的!
为了初步检查我找到的素数是否有问题,我修改了程序。
对于range (2,100)中的I,sum=0:#对于range(2,I)中的J,搜索范围为2-99:if(I % J==0):break else:print(I)# sum=I # print(sum)果然,输出的素数有问题。结果发现找到的质数被多次输出甚至是非质数,当然比正确答案大很多。
但是为什么会有这样的错误呢?
回顾:
Break语句:用于跳出最里面的for或while循环,即break语句只能跳出当前级别的循环。跳出这个循环后,从这个循环后面的代码继续执行。
If-else两个分支:如果满足If后的条件,则执行冒号后的语句;否则,在else冒号后执行该语句。二分支结构用于区分后置if条件的两种可能性,即满足真条件和不满足假条件,从而分别形成执行路径。
因此,在上面的程序中,在嵌套了双层for之后,使用了if-else二分支。如果满足条件:I取J的余数为零(ij,排除i=j的情况),这意味着I能被1和它本身之外的其他整数整除,那么这个I就不是素数。用break跳出循环,继续搜索素数;如果不满足这个条件,就说明找到了一个素数I。执行else冒号后的语句打印出这个质数,并将for循环返回给J,但是J的循环是从2到I的前一个数,如果I是质数,那么无论J是多少都是不能分的。所以每个j都是遍历无穷除打印I。我除了少数几次被打印了几次,以至于素数的输出不准确。即使对于一个非素数I,如果不能被当前遍历得到的j整除,I也会一直被打印,直到I和j可以整除,跳出j的循环。
再复习一遍:
For in-else语句:在in之后遍历遍历结构,else之后的语句只有在For循环因为条件不成立而正常遍历所有内容或者结束循环,并且没有因为break或者return而跳出循环的时候才会执行。
这里的“其他”是为了还是如果?显然,应该是为了。只有遍历完所有的J,我才能算是一个素数,输出。写程序的时候不小心写错了else的位置;Python语法经验不足,未能彻底结合题目意思。认识到问题,修改程序。
Sum=0f或i in range (2,100): for j in range (2,I):if(I % j==0):break else:sum=iprint(sum)output sum=1060,这是正确答案!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。