十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
解题思路:需要实现两个函数,一个是判断数字是否是素数;一个是求和函数。
创新互联公司成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、成都app开发、移动网站建设、微信网站制作、软件开发、绵阳电信机房等实行标准化操作,让客户可以直观的预知到从创新互联公司可以获得的服务效果。
实现函数,判断是否是素数,is_prime,具体代码如下:
def is_prime(num):
"""
判断是否是素数.
:param num:
:return:
"""
result = True
# 质数大于 1
if num 1:
# 查看因子
for i in range(2, num):
if (num % i) == 0:
result = False
break
else:
result = True
# 如果输入的数字小于或等于 1,不是质数
else:
result = False
return result
实现函数,计算数字start到end之间的所有素数之和,sum,具体代码如下:
def sum(start, end):
"""
求闭区间[start, end]之间的素数之和.
:param start:
:param end:
:return: """
result = 0;
for i in range(start, end + 1):
if is_prime(i):
print(i)
result = result + i
return result
在main函数中调用求和,代码如下:
if __name__ == '__main__':
num = 8
print(is_prime(num))
num = 5
print(is_prime(num))
print(sum(1, 5))
完整 代码如下:
你好的!
import math
def is_prime(n): # 简化问题,先利用函数判断是否为质数
if n == 1: # =是赋值,==才是判断,切记切记
return False
for i in range(2, int(math.sqrt(n))+1): # 质数判断条件,注意+1
if n % i == 0:
return False
return True
primes = []
name = int(input())
for i in range(1, name): # 注意这个逗号,很容易写错!
if is_prime(i) is True: # bool值用is判断
primes.append(i)
print('100以内的素数:{}\n100以内素数和:{}'.format(primes, sum(primes)))
欢迎追加悬赏并采纳!
求素数本质上的算法还是:除了1和它本身之外的数都不能整除的数。
在网上看到了一种用一行就解决的代码:
" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])
对这段代码分解,最后一段列表生成式[y for y in range(2,x) if x%y == 0]这个就是核心算法y是从2到x-1的数,x只要能对y整除,配上前面的if not,就是,x不能被2到x-1的数整除,再看前面一段,x for x in range(2,100) 其实就是让x从2到100的取值。我们这假设题目就是求100内的素数。其实代码到这就得出结果了,只要在这些代码外面加上[]就是一个列表生成式了:
[x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0]]
那么为什么还加上了" ".join("%s" % 。。。)这段代码呢?其实只是格式化美观罢了,"%s" %是一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中,join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
下面是结果:
'2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97'
这样解析出来是个字符串还不能分割,所以我重新改了一下:
a = (" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])).split()
list1 = []
for item in (a):
list1.append(int(item))
print(list1)
split()把字符串解析成列表,然后给列表每一项都转化成数字。
在数学里,我们还有种判断素数的简化方法:即y的取值范围是2到x的平方根+1
import math
(" ".join("%s" % x for x in range(2,100) if not [y for y in range(2, int(math.sqrt(x))+1) if x%y == 0])).split()
下面是一种正常的算法:
import math
num = []
i = 2
for i in range(2,100):
j = 2;
for j in range(2,int(math.sqrt(i)+1)):
if (i%j==0):
break;
else:
num.append(i)
print(num)
# 用while求100以内素数并求和
primes = []
n = 2
while n = 100:
i = 2
while i = int(n**(1/2)):
i += 1
if n % (i - 1) == 0:
break
else:
primes += [n]
n += 1
print(primes)
print(f'100以内素数之和为{sum(primes)}')
程序缩进如图所示
def prime(x):
for i in range(2,x):
if x%i==0:
return False
elif i==x-1:
return True
output=filter(prime,range(2,1001))#区分于map函数
output
b = list(output)
c = 0
for i in b:
c = c + i;
print(c)#我的是jupyter编译器,如需要展示素数直接print(b)