利用包含排斥原理求出給定範圍內素數個數的問題

2021-09-28 15:35:35 字數 2339 閱讀 5904

一.前提

今天上離散數學課上看到乙個題目:使用包含排斥原理求不超過120的素數個數,其實按照一般演算法是這樣的:

count = 0

l =

for x in range(121):

#判斷如果x是素數,則列印,如果不是素數就跳過

if x <2:

continue

for i in range(2,x):

#如果能在2到該數的範圍內找出乙個數整除,就停止(相當於此數為合數),繼續判斷下乙個數

if x % i == 0:

break

else:

count = count+1

print(l)

print(count)

這個方法就是乙個乙個判斷,是毫不遺漏地找出全部素數,理解較簡單。

而包含排斥原理解釋如下圖:

二.解題思路

今天講的包含排斥原理求120以內素數個數,按照這個思維,我們只要找出120以內合數即可。11*11=121>120,可以推出120以內任意乙個合數它的因子必定為裡的乙個。

設集合ai(i = 2,3,5,7)是120內能整除2,3,5,7這些數的集合。(手打太麻煩 嘿嘿(滑稽))

三.包含排斥法**實現

n = 120

counta = int(n/2) #|a| 能被2整除的數的個數

countb = int(n/3) #|b| 能被3整除的數的個數

countc = int(n/5) #|c| 能被5整除的數的個數

countd = int(n/7) #|d| 能被7整除的數的個數

countab = int(n / (2 * 3)); # | ab | 能同時被2,3整除的數的個數

countac = int(n / (2 * 5)); # | ac | 能同時被2,5整除的數的個數

countad = int(n / (2 * 7)); # | ad | 能同時被2,7整除的數的個數

countbc = int(n / (3 * 5)); # | ab | 能同時被3,5整除的數的個數

countbd = int(n / (3 * 7)); # | ab | 能同時被3,7整除的數的個數

countcd = int(n / (5 * 7)); # | ab | 能同時被5,7整除的數的個數

countabc =int( n / (2 * 3 * 5)); # | abc | 能同時被2,3,5整除的數的個數

countabd = int(n / (2 * 3 * 7)); # | abd | 能同時被2,3,7整除的數的個數

countacd = int(n / (2 * 5 * 7)); # | abd | 能同時被2,5,7整除的數的個數

countbcd = int(n / (3 * 5 * 7)); # | abd | 能同時被3,5,7整除的數的個數

countabcd =int(n / (2 * 3 * 5 * 7)); # | abcd | 能同時被2,3,5,7整除的數的個數

#包含排斥原理

s = int(n - (counta + countb + countc + countd)

+ (countab + countac + countad + countbc + countbd + countcd)

- (countabc + countabd + countacd + countbcd)

+ countabcd)+4-1

# 加4是原來的2,3,5,7這四個數也是質數,減1是1既不是質數也不是合數

print(s)

#屬於估值法,適用於n不是特別大的情況,當n足夠大時,素因子集合過大,本演算法運算起來將會複雜。

四.改正經過網友指正改正了答案,最後公式求出來的是~(a2∪a3∪a5∪a7),即除去這四個集合的部分。但通過韋恩圖可以看出,2,3,5,7本身也是質數,1既不是質數也不是合數,所以最後結果是27+4-1=30個。

主要是做題太拘泥於公式,沒有理解到精髓是通過韋恩圖來檢查結果。

檔案包含漏洞利用

一 檔案包含漏洞初步 1.原理 在通過php的相應函式 比如include request 666 引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。666 c windows system32 dirvers etc hosts 2....

web php檔案包含(利用phpinfo)

安裝 svn 命令 sudo apt get install subversion 那麼改為 https 下好了以後直接 docker compose up d如果出現 attributeerror module object has no attribute ssl st init 問題 dock...

曲速未來 訊息 區塊鏈與Pauli排斥原理

曲速未來 最初的位元幣 為blockchain奠定了基礎。抽象地說,中本聰概述了這項新技術的乙個革命性方面。區塊鏈安全諮詢公司曲速未來表示 假如有一張紙,裡面有一群朋友之間所有的貨幣交換。然後將它們按發生順序編號,並要求交易方在其交易旁邊簽名作為核實。有幾個問題是顯而易見的。理想情況下,作為這份清單...