tft每日頭條

 > 圖文

 > 素數表200萬以内

素數表200萬以内

圖文 更新时间:2024-11-25 13:28:47

整數範圍内的素數表

經過一個月的運算(不是我算的,是電腦算的),終于得到整數範圍(4字節)内的所有素數表。

其中,短素數.dat 文件保存的是短整數範圍(2字節)内的所有素數,一共3512個素數,最小素數為2,最大素數為32749。數據文件不含任何文件頭和文件附加尾,直接就是所有數據,C語言可以用short int數據類型讀取,Pascal可以用integer數據類型讀取,易語言用短整數數據類型讀取,每兩個字節保存一個數。

整素數.dat 文件保存的是整數範圍(4字節)内的所有素數,文件大小為406M,一共106640347個,最小素數為32771,最大素數為2147483629。數據文件不含文件頭和附加尾,直接就是所有數據,C語言可以用long數據類型讀取,易語言用整數數據類型讀取。

由于易語言的數據結構沒有無符号整數,所以最大素數隻能算到21億,将程序移植到C,則可以使用無符号整數,可以使素數庫增加到42億。

判斷N是否素數的基本算法:

素數表200萬以内(整數範圍内的素數表)1

素數表的應用。(程序說明)

為了加快程序運行速度,在程序加載時就将所有短素數放入内存,将整素數分成11組,每組9694577個整數,需要時一次讀入一組放入内存。

一、顯示素數列表

每一頁顯示200個素數,從小到大,其中短素數在第1~17頁,以及18頁一部分。

素數表200萬以内(整數範圍内的素數表)2

二、快速驗證素數

1、通過檢索“短素數.dat”和“整素數.dat”來判定是否素數。速度非常快,但最大能判定的數大約為21億,再大就無能為力了。

2、大數判定。通過逐個與素數庫中素數求餘來判定,當數字比較小時,速度略慢于方法1,但當數字非常大時,它可以利用素數庫中已知結果進行驗證。如此,當結果太大而實在不能判定時,意味着這個數不能被21億以内的素數整除,因此,這個數是素數的概率非常大。

素數表200萬以内(整數範圍内的素數表)3

三、快速分解質因數

分解質因數。同上,如果非常大的數且精心選擇,能夠讓程序無法分解,一般都可以分解。

素數表200萬以内(整數範圍内的素數表)4

四、求歐拉函數

歐拉函數是指所有小于n且與n互質的數的個數,我們通過求因子的方法來計算。求出n的所有素因子

素數表200萬以内(整數範圍内的素數表)5

,再用公式

素數表200萬以内(整數範圍内的素數表)6

計算。

素數表200萬以内(整數範圍内的素數表)7

五、解丢番圖方程

素數表200萬以内(整數範圍内的素數表)8

因此,每一次叠代必然能使方程的系數變小,最終必然變成

素數表200萬以内(整數範圍内的素數表)9

或者

素數表200萬以内(整數範圍内的素數表)10

,直接求出。

素數表200萬以内(整數範圍内的素數表)11

六、RSA密碼演示

本程序演示了常見的密碼系統運作過程。注意,由于這個程序隻是演示程序,所以它一次能加密的數字,限制在n以内。對于超過n的數字,請分段加密。本程序也不能直接加密文本,請勿嘗試,會出不可預測的錯誤。

素數表200萬以内(整數範圍内的素數表)12

先在加密的原文框内輸入原始數字,程序會輸出一個标志數;将計算結果手動輸入到解密程序的密文框,就可以得到原文。一般情況下都是可以正确計算,偶爾會出現錯誤。

特别說明:

不知道為什麼,從易語言開發完成到現在,易語言和360就已知過不去。隻要是易語言開發的程序,編譯成exe文件後,必被360報毒,哪怕這個程序一句代碼都沒有也是木馬,什麼形式的木馬不一定。

我也很苦惱,但是一點辦法都沒有。

我猜測是因為易語言使用全漢語編程,因此變量命名、函數命名和其他語言如C有所不同,也就被當成木馬殺掉了。

出現這個問題的解決辦法也很簡單。請打開你的360殺毒軟件。

素數表200萬以内(整數範圍内的素數表)13

這裡有一個“查看隔離文件”,點擊進入。

素數表200萬以内(整數範圍内的素數表)14

找到被隔離的程序“素數應用.exe”,并恢複就可以了。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved