做一道leetcode,需要用到判断质数
在 Python 中,可以编写一个函数来确定一个数是否是质数。质数是指只能被 1 和其本身整除的数。以下是一个简单且高效的算法来检查一个数是否为质数:
def is_prime(n):
"""判断一个数是否是质数"""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
# 示例
number = 29
if is_prime(number):
print(f"{number} 是质数")
else:
print(f"{number} 不是质数")
解释
- 初步检查:
- 如果
n
小于等于 1,则它不是质数。 - 如果
n
小于等于 3(且大于 1),则它是质数。 - 如果
n
能被 2 或 3 整除,则它不是质数。
- 如果
- 进一步检查:
- 我们从 5 开始检查,跳过偶数,因为偶数已经被前面的检查覆盖。
- 在循环中,我们检查
n
是否能被i
或i + 2
整除。 - 我们只需检查到
sqrt(n)
,因为一个大于sqrt(n)
的数的因子必定与一个小于sqrt(n)
的数配对。
最后回到这个题目,可以先用一个函数判断是否为质数,然后记录质数的下标,最大的距离为列表最后一个下标与第一个下标之间的差
class Solution:
def maximumPrimeDifference(self, nums: List[int]) -> int:
def is_prime(n):
"""判断一个数是否是质数"""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
res=[]
for i,num in enumerate(nums):
if is_prime(num):
res.append(i)
if len(res)<=1:
return 0
else:
return res[-1]-res[0]