日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python例题(一) 输入一个正整数判断是不是素数

發布時間:2024/1/18 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python例题(一) 输入一个正整数判断是不是素数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么是素數與合數

定義

在大于1的整數中,除了1和該數自身外,無法被其他整數整除的數。大于1的數若不為素數,則被稱為合數,也叫作合成數。

素數的特點

  • 大于2的質數只能是奇數。(不能說大于2的奇數都是質數。)

  • 大于5的質數,個位數只能是1、3、7、9。(不能說個位數是1、3、7、9的數都是質數。)

  • 大于3的質數只能是6n-1或者6n+1型(n是正整數)。(不能說6n-1或者6n+1型的數都是質數)。

  • 合數的特點

  • 所有大于2的偶數都是合數;
  • 所有大于5的奇數中,個位為5的都是合數;
  • 除0以外,所有個位為0的自然數都是合數;
  • 所有個位為4,6,8的自然數都是合數;
  • 最小的(偶)合數為4,最小的奇合數為9;
  • 每一個合數都可以以唯一形式被寫成質數的乘積,即分解質因數。(算術基本定理)
  • 任何一個合數都可以分解為幾個質數的乘積
  • 1既不是質數,也不是合數。
  • 除了2之外,所有的偶數都是合數;除了2之外,所有的質數都是奇數;
  • 奇數中,有合數(例如9、15、21等),也有質數(比如3、5、17)。
  • 2. 方法介紹

    1. 直接比較,雖然最易想到,但效率較低

    即暴力搜索,從1到n的數字全部枚舉并進行檢查.這個方法雖然很容易想到,但是很效率卻很低.

    用for和break寫了一個,while和bool不打算寫了,反正下面也有.

    number = int (input('請輸入一個正整數:')) if number > 2:for x in range (2,number+1):if number % x == 0:breakif x == number:print (number,'是素數')else:print (number,'不是素數') else:print('?請輸入正整數???還要大于2?')

    2. 進行初步優化,合理利用特點來計算

    合數必定可拆分成兩個非1的約數,其中一個小于該數的平方根,另一個大于該數的平方根。

    用for和break

    import math m = int (input('請輸入一個大于一的整數:')) k = int (math.sqrt(m)) for i in range(2,k+2):if m % i == 0:break if i == k+1:print (m,'是素數') else:print (m,'不是素數')

    用while和bool

    import math m = int(input ('請輸入一個大于1的正整數:')) n = int (math.sqrt(m)) flag = True i = 2 while i <= n and flag == True:if (m / i == 0 ):flag = Falseelse:i += 1 if (flag == True):print (m ,'素數') else:print(m ,'合數')

    3.繼續優化,在被測試數逐漸增大時,效率更顯著

    這個優化是考慮到了質數的另一個特點:大于3的質數只能是6n-1或者6n+1型(n是正整數).
    首先 6x 肯定不是質數,因為它能被 6 整除;其次 6x+2 肯定也不是質數,因為它還能被2整除;依次類推,6x+3 肯定能被 3 整除;6x+4 肯定能被 2 整除。那么,就只有 6x+1 和 6x+5 (即等同于6x-1) 可能是質數了。所以循環的步長可以設為 6,然后每次只判斷 6 兩側的數即可。

    import math m = int (input('請輸入一個正整數:')) if m <= 3 and m > 1:print(m,'是素數哦')# 2和3單獨處理 if m % 6 != 1 and m % 6 != 5:print (m,'不是素數') # 不在6的倍數兩側的一定不是素數 else: #在6的倍數 兩側的也仍需判斷,判斷可以套用第二個方法來進行判斷n = int (math.sqrt(m))for i in range(5,n+2,6):if (m % i == 0 or m % (i+2) == 0):breakif i == n + 1:print (m,'是素數')else:print (m,'不是素數')

    總結

    以上是生活随笔為你收集整理的Python例题(一) 输入一个正整数判断是不是素数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。