Python例题(一) 输入一个正整数判断是不是素数
生活随笔
收集整理的這篇文章主要介紹了
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. 方法介紹
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 兩側的數即可。
總結
以上是生活随笔為你收集整理的Python例题(一) 输入一个正整数判断是不是素数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KING_C#学习之QRCode二维码(
- 下一篇: python股票分析系列_Python股