给定数字n,任务是计算其本数。原始数(表示为Pn#)是前n个素数的乘积。数字的本数与数字的阶乘相似。在原始数中,并非所有自然数都会相乘,只有素数会相乘才能计算数字的原始数。用P#表示。
示例:
输入:n = 3
输出:30
Priororial = 2 * 3 * 5 = 30
我认为解决此问题的方法是:
1-编写一个isPrime函数以测试数字是否为质数。
2-编写一个可以打印n个素数的函数(int n), 例如n = 3,然后打印2,3,5三个素数。
3-将所有素数相乘。
我已经尝试过了。在codewars.com上通过了测试用例。但是当函数在随机测试上执行时。这需要太多时间。
import numpy
def num_primorial(n):
prime_ls = []
for i in range(2, n + 2):
if i == 2 or i == 3: prime_ls.append(i)
else:
while (1):
if all(i % j != 0 for j in range(2, i)) and i not in prime_ls:
prime_ls.append(i)
break
else: i += 1
return numpy.prod(prime_ls)
Q1-是否有任何内置函数可以创建等于给定数字的素数列表?
Q2-如何减少大量代码的执行时间?
请帮助我解决此问题。