赞
踩
## 用Python实现1~500之内的所有素数相加之和
首先我们应了解素数的定义,找到最关键的,大于1并且只能被1和自身整除的数称为素数。
既然是编程,那就应该有编程思想,如何将数学模型框架用代码表示出来。
这里我们采用函数调用来解决这个题,函数定义如下 def 函数名(参数表列):表达式。
同时我们应知道Python当中的for的语法规则:for 变量 in range(i,j,k)i为变量的初始值,j为变量的最终值+1,即为开区间,k为i到j的步长,默认为1。即C语言当中for的表达式3,i的增值方式,每次循环过后i+k。
知晓了这些之后,我们进行分析,如下:
首先素数有无穷多个,代值求解法无论是个人或者计算机而言都行不通,既然已经知道素数只能被1和其本身整除,那就代表比他小的其他数都不能整除该素数,即余数不为0.所以我们可以一种循环的方式先尝试将某个数除以比他小的正整数:
代码及运行结果如下:
def divide(i):
sum = 0
for j in range(1,i+1):
if i%j==0:
sum +=0
print("%d不是素数"%i)
elif i%j!=0:
sum +=i
print("%d是素数"%i)
return sum
print("该素数为%d"%divide(10))
我们可以看到运行结果,10除以1~10的各个数时,10能整除以1,2,5,10。不能整除3,4,6,7,8,9。注意for后为什么为i+1,如前面所说,因为是开区间,取不到那个数,所以加1为取到那个数继续运行。
所以下一步我们想,因为只能除以自身和1,那么我们增设一个变量,当余数为0时,我们让变量加1,最终如果为素数的话,结果变量应该是为2,改变代码:
代码及运行结果如下:
def divide(i):
sum = 0
k = 0
for j in range(1,i+1):
if i%j==0:
k +=1
elif i%j!=0:
k +=0
if k==2:
sum +=i
else:
print("%d不是素数"%j)
return sum
print("该素数为%d"%divide(7))
此时我们可以看到,当输入7时,调用函数,实参传给形参,进入for循环,注意这里的for循环是一个一个进行的,我这里笼统的说,用7除以1~7各数得到余数用if判断其是否为0,再进行变量k的值的变化。
现在我们确定了一个值如何判断是否为素数,那么1~500之间我们应该如何能,既然7能够从1到7挨个除,那1到500当然也能使用for循环进行遍历。此时应该为双重for循环,因为从1到500是都要判断的:
代码及运行结果如下:
def divide(i):
sum =0
for j in range(1,i+1):
k =0
if k==1:
continue
for t in range(1,j+1):
if j%t ==0:
k +=1
if k==2:
sum +=j
return sum
print("请输出1-500中素数的和:%d"%divide(11))
注意此时变量k的位置,由于每次进行for循环,都是重新开始对k进行赋值判断,所以它应该在第一个for之后进行重置,这与C语言当中的选择法有些许相似。
该题不使用函数调用,可直接将i进行赋值求解
这里我代入的值是11,把11改成500即可得到其答案。
如觉得还可以的话,请多多点赞加收藏哦!有疑问可在下方留言。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。