首页
/
每日頭條
/
科技
/
素數問題python函數
素數問題python函數
更新时间:2024-10-11 18:42:20
本文節選自《50個與數學有關的Python編程》。創作結束,最後一篇獻上源碼。歡迎點贊、關注、收藏。

素數問題python函數(素數這個問題可不簡單)1

創作計劃

為什麼創作?

不少老師教編程,喜歡拿教大學那一套來教中學生。筆者認為這是不合适的,中學生有中學的學習方法。我認為從數學入手才能讓中學生更容易更快地融入編程。

往期回顧

01 餘數

02 約數與倍數

正文

素數的定義是:除1外所有的正整數,如果僅僅能被自身和1整除,那麼稱為素數;

與素數對應的是合數:除1外所有的正整數,不是素數就是合數。

題1 判斷N是不是素數

N = eval(input("請輸入一個大于1的正整數:")) for i in range(2,N): if N % i == 0: print(f"{N}是合數") exit() # 用exit函數,不能用break。 print(f"{N}是素數")

這是根據定義來判斷的,但這不是一個最好的辦法。

題2 埃氏算法

埃氏指的是埃拉特色尼。埃拉特色尼是古希臘時代的地理學家和數學家,是人類曆史上第一個正确測量地球半徑的人。

這個算法的精髓在于,判斷N是否為素數,不用判斷N能否被N-1整除。實際上,過了N的一半,N就沒法整除了。如能把10整除(除自身外)的最大的數是5。所以,上述算法,完全可以省下一半的循環,但這還不是最省的。

令a×a≥n,如果n能整除2~a中間的某個整數的話,其商一定在a~n之間;如果n整除a~n之間的某個整數的話,其商一定在2~a之間。所以判斷n是否為素數的最省的方法是,看它能否被2~根号n的數整除。

如數字11,它的開方小于4,它不能被2,3整除,因此必為素數。

N = eval(input("請輸入一個大于1的正整數:")) sqrt_N = int(pow(N,0.5)) #int能取出整數部分,如int(1.5)=1。 #int(x),如果x>0,則int相當于向下取整, #如果x<0,則int相當于向上取整 for i in range(2,sqrt_N 1): if N % i == 0: print(f"{N}是合數") exit() # 用exit函數,不能用break。 print(f"{N}是素數")

題3 找出100以内的孿生素數

形如(3,5)(5,7)(11,13)的一對素數叫孿生素數。

def is_prime(n): sqrt_n = int(pow(n,0.5)) for i in range(2,sqrt_n 1): if n % i == 0: return False #return讓函數直接exit了 return True prime_list = [] for num in range(2,100): if is_prime(num) and is_prime(num 2): #注意and的執行順序,隻要當前一個是True時才會執行後一個 prime_list.append((num,num 2)) print(prime_list)

題4 素數列表

為什麼在此提素數列表呢?因為這個是很多精彩常考的題。如找出2019以内所有的素數。

我們用埃氏算法:

  1. 建立2~N的數字列表
  2. 從小到大,如果一個數字能被前面的數字整除,就把它删了。
  3. 當執行到N的開方時,剩下的就是素數了。

如找出10以内的素數。

  1. 建立數字列表[2,3,4,5,6,7,8,9,10]
  2. 從2開始,凡是能被2整除(除2外)的就删了,剩下:[2,3,5,7,9]
  3. 再删除3的倍數,剩下:[2,3,5,7]
  4. 由于10的開方小于4,所以剩下的列表就是素數列表了。

這個算法适合人計算,對于計算機而言還要謹慎一點,關鍵點就在于,一個元素被删了之後,列表的下标要向前移動的。所以正确的做法是,從後往前删。

n = 2019 prime_list = list(range(2,n 1)) #建立列表 sqrt_n = int(pow(n, 0.5)) for i in range(2, sqrt_n 1): length = len(prime_list) for j in range(length-1,-1,-1): # 遍曆删除列表,要從後往前遍曆,否則會導緻越界 if (prime_list[j] % i == 0) and (prime_list[j] != i): prime_list.pop(j) print(prime_list)

素數問題python函數(素數這個問題可不簡單)2

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
機械革命筆記本1650ti
機械革命筆記本1650ti
IT之家5月12日消息,今天,機械革命發布了無界14筆記本的新配置,i5-12500H/16G/512G,首發3999元,5月19日開賣。IT之家了解到,新款無界14搭載的i5-12500H為12核16線程,4性能核8能效核,最高4.5GH...
2024-10-11
雲米21face是什麼冰箱
雲米21face是什麼冰箱
科技改變生活,科技提高生活檔次這句話一點也不假,以前隻有在科幻電影中才能出現的場景竟然也在我家實現了。每當有朋友走進我們家的大門,第一句話就是:“哇!你家冰箱真有科技感,哇!你家冰箱什麼品牌的,這麼炫酷”。這是什麼情況呢?這一切還得從我家那...
2024-10-11
小米手機進入米兔模式後該幹什麼
小米手機進入米兔模式後該幹什麼
分享生活小妙招,享受科技新生活!大家好,歡迎來到今天的知識分享!我是你們的好朋友小俊!今天我們來給大家探讨一下小米手機可以提升安全性和流暢性能的3個設置,具體是哪3個一起來看看!一、開啟安全鍵盤打開設置,找到【隐私設置】在隐私設置中點擊右上...
2024-10-11
華為q1子路由器怎麼連接母路由器
華為q1子路由器怎麼連接母路由器
華為路由Q1包括母路由和子路由。母路由撥号上網,覆蓋客廳,房間等大部分區域;子路由覆蓋房間角落、洗手間等原有Wi-Fi死角。若房子較大,Wi-Fi死角較多,可單獨購買子路由擴展覆蓋。溫馨提示:在與子路由器配對之前,請确保你的華為路由Q1已經...
2024-10-11
軟件著作權登記一般多久
軟件著作權登記一般多久
什麼是軟件著作權計算機軟件著作權是指軟件的開發者或者其他權利人依據有關著作權法律的規定,對于軟件作品所享有的各項專有權利。就權利的性質而言,它屬于一種民事權利,具備民事權利的共同特征。著作權是知識産權中的例外,因為著作權的取得無須經過個别确...
2024-10-11
Copyright 2023-2024 - www.tftnews.com All Rights Reserved