问题描述
Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入一个数n,表示前几个质数,然后输出前n个质数乘积对50000的模
最初思路
最初准备首先定义一个函数,用于判断是否是质数,然后在主函数中循环,如果是的话相乘,并且计数+1,直到最后达到期望值。
import sys
def handlerNum(num):
# 质数大于 1
if num > 1:
# 查看是否有其他因子
for i in range(2, num//2+1):
if (num % i) == 0:
return 0
break
else:
return 1
# 如果输入的数字小于或等于 1,不是质数
else:
return 0
n = int(input())
re = 0
temp = 1
for i in range(100000000000000000):
if(handlerNum(i + 1) == 1):
temp = temp * (i + 1)
re = re + 1
if(re == n):
print(temp % 50000)
sys.exit
else:
continue
经过自己的测定,答案是对的,但是会超时,于是尝试换种思路。
优化思路
将对是否等于n的判断用while的形式放在最初进行判断
def getPrime(n): # 找到前n个质数
lists = []
count = 0
number = 2
while count != n:
for i in range(2, number):
if(number % i == 0):
break
else:
lists.append(number)
count += 1
number += 1
return lists
def main():
n = int(input())
lists = getPrime(n)
result = lists[0]
for item in lists[1:]:
result *= item
print(result % 50000) # 取模运算
main()