java用遞歸篩選法求N以內的孿生質數(孿生素數)

2021-02-19 鈞漫元瀧

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分布情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for循環來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞歸篩選法來解決這個問題。

新建List,然後從第0位開始,如果後面的能被這個數整除,則從數組中移除改元素,以此類推,最後留下的就是質數(素數)。代碼如下:

1static void get(List<Integer> list, int tt) {
2        int num = list.get(tt);
3        for (int i = tt + 1; i < list.size(); i++) {
4            if (list.get(i) % num == 0) list.remove(i--);
5        }
6        if (list.size() > ++tt) get(list, tt);
7    }

然後再去做相鄰元素差求得孿生質數(孿生素數),貼一下求10000以內孿生質數(孿生素數)全部的代碼:

1List<Integer> list = new ArrayList<>();
2        for (int i = 2; i < 10000; i+=2) {
3            list.add(i);
4        }
5        get(list, 0);
6        for (int i = 0; i < list.size() - 1; i++) {
7            Integer integer = list.get(i);
8            Integer integer1 = list.get(i + 1);
9            if (integer1 - integer == 2) outputData(TEST_ERROR_CODE, "孿生質數:", integer + TAB + TAB + integer1);
10        }

最後附上一份冒泡排序和插入排序的練習代碼:

1   public static void ff(int[] data) {
2        for (int i = 0; i < data.length; i++) {
3            for (int j = i; j > 0; j--) {
4                if (data[j] < data[j - 1]) {
5                    int num = data[j];
6                    data[j] = data[j - 1];
7                    data[j - 1] = num;
8                }
9            }
10        }
11        output(changeArraysToList(data));
12    }
13
14    public static void ff1(int[] data) {
15        for (int i = 0; i < data.length; i++) {
16            for (int j = 0; j < data.length - i - 1; j++) {
17                if (data[j] > data[j + 1]) {
18                    int num = data[j];
19                    data[j] = data[j + 1];
20                    data[j + 1] = num;
21                }
22            }
23        }
24        output(changeArraysToList(data));
25    }

往期文章精選

java一行代碼列印心形

Linux性能監控軟體netdata中文漢化版

接口測試代碼覆蓋率(jacoco)方案分享

性能測試框架

如何在Linux命令行界面愉快進行性能測試

圖解HTTP腦圖

寫給所有人的編程思維

將json數據格式化輸出到控制臺

如何測試概率型業務接口

將swagger文檔自動變成測試代碼

Mac+httpclient高並發配置實例

httpclient處理多用戶同時在線

相關焦點

  • 為什麼會有很多的孿生素數?
    素數,也稱為質數,指在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數。孿生素數,也稱為孿生質數、雙生質數,是指一對素數,它們之間相差2。例如3和5,5和7,11和13等等。定義很簡單。但是,一旦人們探索素數及其孿生素數的意義時,就會意識到它們所表現出的極為巨大的體量及其許多微妙的行為,卻不是那麼簡單。
  • 孿生素數猜想——是否存在無窮多個素數p使得p + 2是素數?
    孿生素數猜想指出:孿生素數有無窮多個孿生素數是一個與另一個素數相差2的素數。一組相差2的兩個素數稱為孿生素數對。2013年,張一坦(1955-)證明了對於某個整數n > 70,000,000,存在無窮多對相差n的素數,即存在無窮多對相差小於70,000,000的素數。在張發表聲明的一年內,在陶泰倫斯(1975-)努力的下將7000萬縮小到到了246。換句話說,我們知道有無窮多個質數的差值小於246。
  • 張益唐與孿生素數
    這位年近六旬,在一所不太知名的大學中擔任臨時講師的人,這位幾乎沒有發表過專業論文的人,竟然成為破解數學領域最著名猜想之一「孿生素數猜想」的關鍵人物。 所謂「素數」,又稱「質數」,是指只能被1和它本身整除的數字,例如:2、3、5、7等等。但隨著數字增大,素數在數軸上的分布越來越稀疏。想像一條數軸,普通數字是綠色的,素數是紅色的。
  • 希爾伯特第八問題有望終結: 孿生素數猜想獲證!
    根據在 p 大 -p 小 =(2 n-p小) 中,左兩素數項與右一偶數項是兩兩互素的,2(n-p 小)必須囊括所有素數因子。 可用反證法證明,如果有素數因子 r 缺位,那麼 2(n-p 小)必不含 2n r,而 2n r-3 要麼是奇素數,要麼是奇合數。
  • 求素數——枚舉、篩法、六素數法
    判斷素數在算法問題中經常遇到,這裡小結幾種求素數的常用方法。
  • 《數學提高》什麼是素數,素數有哪些?
    (3)素數的個數是無限的。(4)素數的個數公式π(n)是不減函數。(5)若n為正整數,在n的2次方到(n+1)的2次方之間至少有一個素數。(6)若n為大於或等於2的正整數,在n到n!之間至少有一個素數。(7)若素數p為不超過n(n大於等於4)的最大素數,則p>n/2。
  • 華人數學家張益唐證明「弱孿生素數猜想」
    什麼是孿生素數猜想素數(也稱質數)是只能被1和自身整除的數,如2、3、5、7等等。算術基本定理證明:每個大於1的正整數都可以寫成素數的乘積,並且這種乘積的形式是唯一的。因此,素數也被稱為自然數的「建築的基石」。公元前300多年,古希臘數學家歐幾裡得在其經典著作《幾何原本》中用反證法證明了素數有無窮多個。
  • 發現「孿生素數」猜想的證據,但可能在另外一個宇宙中!
    數學家們為數學中最著名,但未被證明的猜想之一發現了一個新證據,這個猜想被稱為「孿生素數」猜想;但這個證據的路線可能不會幫助證明孿生素數猜想本身。孿生素數猜想是關於素數(只能被自身整除且為1的數字)如何以及何時出現在數線上的猜想。「孿生素數」是在那條線上彼此相差2的質數:3和5,5和7,29和31,137和139,依此類推。
  • 數學家發現「孿生素數」猜想的證據,但可能在另外一個宇宙中!
    「孿生素數」是在那條線上彼此相差2的質數:3和5,5和7,29和31,137和139,依此類推。孿生素數猜想指出,存在無限多個孿生素數,並且無論沿著數線走多遠,你都會不斷遇到它們。同時還指出,存在無限多個素數對,它們之間每隔一個可能的間隙(相4,8,200000等的素數對),數學家非常確定這是真的。
  • 孿生素數猜想之後的故事
    2012年6月,張益唐到朋友家做客時靈光一閃,找到了思考了三年之久的開啟素數間隔問題的關鍵性的突破。用新的方法,他證明了有無窮對素數,它們相差不過7000萬。他將他的新方法與新結論,用簡潔明了的語言,寫成了一篇論文,投稿到數學界的頂級期刊《數學年刊》。這篇論文名為Bounded gaps between primes(《素數間的有界間隔》)。
  • 孿生素數猜想的新突破
    孿生素數猜想是數論領域中最著名的猜想之一,自提出以來,便一直困擾著數學家。孿生素數是指那些相差為 2 的素數對,比如 3 和 5、5 和 7、11 和 13、17 和 19、599 和 601……除了第一對孿生素數(即 3 和 5)之外,每個孿生素數對中的第一個素數總是比 6 的倍數小 1。所以第二個孿生素數總是比 6 的倍數大 1。
  • 何時攻破質數難題,探尋神奇的質數
    公元前 200 左右,古希臘數學家埃拉託斯特尼(Eratosthenes)提出了素數的快速篩選法,這是一種簡單且歷史久遠的篩法,用來找出一定範圍內所有的素數。用於求一定範圍內的質數.變式1.已知n是整數,且|n2+2n﹣224|是質數,則n=______.【解析】先把n2+2n﹣224分解成兩個因式積的形式,再根據n是正整數及質數的定義求出n的值即可.
  • 素數的性質與宇宙時空的關係
    明顯能看出質數在某些地方,隱約地形成直線和螺旋線,我們稱作質數螺旋( 國外稱Ulam spiral,既烏拉姆螺旋),這一下激起了數學界對素數規律的尋找熱情,1964年3月的《美國科學人》雜誌甚至把該圖作為封面。
  • 堅守數學夢,發現孿生素數重大規律
    今年2月,長安區58歲的電焊工人姬坤明在雜誌《締客世界》中發表了一篇數學論文,這篇名為《關於孿生素數的重大發現》的論文主要闡述發現孿生素數的共同特性及規律,一時間,他和他的數學夢在工人中成為傳奇。
  • 58歲建築工人堅守數學夢想,發現孿生素數重大規律
    今年2月,長安區58歲的電焊工人姬坤明在雜誌《締客世界》中發表了一篇數學論文,這篇名為《關於孿生素數的重大發現》的論文主要闡述發現孿生素數的共同特性及規律,一時間,他和他的數學夢在工人中成為傳奇。經過對哥德巴赫猜想等數學理論的認真研讀,偶然讀到華裔數學家張益唐「關於孿生素數的猜想」後,姬坤明對孿生素數產生了強烈的興趣。2019年冬天的一個夜晚,姬坤明像往常一樣照顧生病的妻子睡下,夜燈下看書的他突然靈感乍現。興奮的他立馬將1000以內的強孿生素數排列出來,觀察、整理、驗算…….果然!這些孿生素數對之和都能被自然數12整除!
  • 樹上微精讀——自然數的質數判定,合數分解與孿生質數分布
    本書站在全新角度,用全新方法,自成體系地解決,自然數中的質數判定和合數分解成質因子兩個難題。世界難題1內容簡介:書中給出了自然數的數性和質數的判定定理和判定公式、自然數中的合數分解定理和質因數判定公式、自然數中孿生質數的分布定理和判定公式。給出了借用普通計算機進行自然數數性判定、求質數、求孿生質數、求合數的質因數的方法。
  • 存在最大的素數麼?歐幾裡得告訴你答案
    它們是多疑而又孤獨的數字,正是由於這一點,馬蒂亞覺得它們非常奇妙 在大學一年級的一門課上,馬蒂亞知道,在質數當中還有一些更加特別的成員,數學家稱之為「孿生質數」,它們是離得很近的一對質數,幾乎是彼此相鄰。質數一直受數學家的關注與探索。
  • 〖美文〗孿生質數
    紙條上,只是寫著一道題,問對方是否有更好的解法。學霸的世界,真是理解不能...那之後,他們就慢慢走近了,可隨著時間推移,卻又慢慢疏遠了,總是找不到合適的時機,傳達彼此的心意。不善言辭的兩個質數,總是不能互相整除,似乎總有什麼東西,夾在他們之間。這裡孟傑跟我說了一個數學概念,我聽了很是傷感,一口喝了大半瓶的啤酒...
  • 布朗常數與 CPU Bug以及孿生質數
    古希臘時代,歐幾裡得證明了質數有無限多個。後代的數學家發現,從1開始算,數字愈大,質數分布得愈稀疏;但奇特的是,儘管分布得再稀疏,但只要出現一個質數,就可以在它附近找到另一個質數,例如41和43、101和103、10007和10009,它們之間都相差2 。
  • 孿生素數猜想,張益唐究竟做了一個什麼研究?
    (文/王若度)最近,《自然》雜誌的網站上刊登了一篇文章,在華人數學愛好者和學者之間產生了轟動。該文章的標題是《第一個無窮組素數成對出現的證明》。「孿生素數猜想」是什麼?這篇文章為何會引起轟動呢?這要從「孿生素數猜想」說起。眾所周知,素數是只含有兩個因子的自然數(即只能被自身和1整除)。而「孿生素數」是指兩個相差為2的素數,例如3和5,17和19等。孿生素數猜想是說,存在無窮對孿生素數。