免费资源网,https://freexyz.cn/
目录
  • 题目
  • 方法一:暴力枚举法
    • for-else语句
  • 方法二:内置函数
    • 方法三:优化了时间复杂度
      • 附:打印素数
        • 方法一:
        • 方法二:
      • 总结

        题目

        输入一个数,如果是素数就输出"Yes",否则输出"No"

        方法一:暴力枚举法

        def is_prime(x):
            if x==1:
                return False;
            for i in range(2,x):
                if x%i==0:
                    return False
            return True
        n=int(input())
        if is_prime(n):
            print("Yes")
        else:
            print("No")

        自定义函数is_prime(),首先排除1,然后再对该数之前的数进行枚举,当遇到能被当前的数整除时返回False,若没有数能将其整除意味着这个数是素数,返回True。然后对返回的结果进行判断从而输出"Yes"或"No"

        当然,我们可以省去最后if-else的判断,直接在函数is_prime()里来输出"Yes"或"No"

        def is_prime(x):
            if x==1:
                print("No")
                return
            for i in range(2,x):
                if x%i==0:
                    print("No")
                    break
            else:
                print("Yes")
        n=int(input())
        is_prime(n)

        for-else语句

        在上面的代码中,我采用了for-else语句,这是一个比较特殊的语句。当for循环正常结束时,else也会执行,而当for循环未正常结束,例如使用break提前退出时,则不会执行。使用这个语句往往可以减少代码量,避免使用flag。

        方法二:内置函数

        import sympy
        n = int(input())
        if sympy.isprime(n):
            print("Yes")
        else:
            print("No")

        使用python自带的sympy库中的isprime()函数仅需一行就能判断素数

        方法三:优化了时间复杂度

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

        优化后的代码利用了以下观察:

        1.所有的素数都是6的倍数加减1(除了2和3)。

        2.如果n可以整除2或3,它肯定不是素数。

        3.如果n不是2或3的倍数,并且不能整除6的倍数加减1的数,那么它也不是素数。所以可以只在6的倍数加减1的数中进行枚举,跳过其他数字。这样可以减少循环的次数,提高效率。 

        附:打印素数

        方法一:

        1、打印指定范围内的素数

        def sushu3(c):
            import math
            m = 2
            List = []
            while m < c:
                j = 2
                # 只要从2判断到根号m,若m不能被其中的任何一个数整除,则m为素数
                while j <= math.sqrt(m):
                    if m % j == 0:
                        break
                    j = j + 1
                if (j > math.sqrt(m)):
                    List.append(m)
                m = m + 1
            print(f"{c}以内的素数:{List}")
            
         # 调用方法sushu3方法,打印100以内的素数
        if __name__ == '__main__':
            sushu3(100)
        

        方法二:

        2、打印指定区间内的素数

        def sushu4():
            Min = int(input("请输入起始值:"))
            Max = int(input("请输入终止值:"))
            List = []
            # 循环遍历指定区间内的数
            for i in range(Min, Max + 1):
                if i > 1:
                   # 除了1和本身以外的数,如果能被除则break退出
                    for j in range(2, i):
                        if (i % j) == 0:
                            break
                    # 若不能被1和本身的数除则追加到List列表
                    else:
                        List.append(i)
            print(f"{Min}~{Max}区间内的素数有:{List}")

        总结

        免费资源网,https://freexyz.cn/
        声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。