📜  资质|算术能力3 |问题5(1)

📅  最后修改于: 2023-12-03 14:57:48.510000             🧑  作者: Mango

资质|算术能力3 |问题5
介绍

本题考察程序员的算术能力和编程技巧。给定一个正整数 n,请编写一个函数,判断 n 是否是质数。如果是质数返回 True,否则返回 False

输入

一个正整数 nn <= 10^6。

输出

如果 n 是质数,返回 True,否则返回 False

示例

输入:

5

输出:

True
题解

判断一个数是否是质数,最直接的方法是试除法。这里列举两种常见的试除法实现。

算法一:枚举法

从 2 到 sqrt(n) 枚举,若能整除,说明 n 不是质数,反之,则是质数。

时间复杂度为 O(sqrt(n))。

import math

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

算法二:埃氏筛法

先将 2 ~ n 的所有数标记为素数,然后从 2 开始遍历,若发现一个数为素数,则将它的倍数全部标记为合数,直到遍历到 n 为止。最后,所有未标记的数即为质数。

时间复杂度为 O(nloglogn)。

def is_prime(n):
    if n < 2:
        return False
    primes = [True] * (n+1)
    primes[0], primes[1] = False, False
    for i in range(2, int(n**0.5)+1):
        if primes[i]:
            for j in range(i*i, n+1, i):
                primes[j] = False
    return primes[n]
总结

本题考察了程序员的算术能力和编程技巧,通过掌握求质数的算法以及代码实现,可以提高程序员的代码能力和编程思维。