|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- # 10以内的素数之和是:2+3+5+7=17,那么请编写程序,计算2000000以内的素数之和?
- import math
- def is_prime(number): # 定义一个判断是否为素数的函数
- if number > 1: # 如果形参大于1
- if number == 2: # 如果形参等于2
- return True # 返回结果为真(2为素数),跳过后续循环
- if number % 2 == 0: # 如果形参除2取余为0(不为素数),能被2整除肯定不是素数
- return False # 返回结果为假,跳过后续循环
- # 不满足以上两个if循环则会进入for循环
- for current in range(3, int(math.sqrt(number) + 1), 2): # current(当前的)属于range循环2-->number开平方加1-->step为2
- if number % current == 0: # 如果current能被number整除
- return False # 返回假(因为一个数最多能被自身的一半整除
- return True # 如果以上条件都不符合,则返回True(即为素数)
- return False # 小于等于1的数均为假
- def get_primes(number): # 定义一个获取素数的函数
- while True: # 设定循环条件永远为真
- if is_prime(number): # 如果判断函数is_prime(number)为真
- yield number # 那么生成一个number值
- number += 1 # 同时number值加1
- def solve(): # 定义一个解答函数
- total = 2 # 设置局部变量total的值为2
- for next_prime in get_primes(3):
- # 问题1:个人理解为get_primes(3)是一个从3开始指向正无穷的素数生成器,for循环从is_prime(3)开始,且next_prime的值属于这个生成器
- if next_prime < 20000: # 如果next_prime小于2000000(生成的数字小于20000)
- total += next_prime # 局部变量total重新赋值为自身与next_prime的和
- else: #
- print(total) # next_prime大于20000时,输出total的值
- return
- # 问题2:这里return后面为什么不接参数??
- if __name__ == '__main__':
- solve()
复制代码
以上两个问题请大佬指教
1. 你的理解是正确的
2. 因为不需要返回任何内容
|
|