1. 程式人生 > >JavaSE程式設計案例系列(2~100)——找出1~n之內的素數

JavaSE程式設計案例系列(2~100)——找出1~n之內的素數

找出1~n內的素數

下面是今天解決的問題,輸入一個n上限,找到1~n之間素數的個數,並且打印出素數,

文章目錄

素數:

質數(prime number)又稱素數,有無限個。一個大於1的自然數,除了1和它本身外,不能被其他自然數整除,

黎曼猜想:

素數在自然數中的分佈問題在純粹數學和應用數學上都是很重要的問題。素數在自然數域中分步並沒有一定的規則。1859年,黎曼發表了《在給定大小之下的素數個數》的論文。這是一篇內容極其深刻不到10頁的論文,他將素數的分佈的問題歸結為函式的問題,現在稱為黎曼函式。即素數出現的頻率與所謂黎曼函式緊密相關。黎曼證明了這個函式的一些重要性質,並簡要地斷言了其它的性質而未予證明。
在黎曼去世後的100多年中,世界上許多優秀的數學家盡了最大的努力去證明他的這些斷言,如今,除了他的一個斷言外,其餘都按黎曼所期望的那樣得到了解決。那個未解決的斷言現稱為“黎曼猜想”,即“素數的分佈最終歸結為所謂的黎曼函式的零點問題:函式位於之間的全部零點都在之上,即零點的實部都是。”許多有名的數學家曾嘗試去證明這個猜想,可是至今卻沒有人能證明這個“黎曼猜想”!
質數被利用在密碼學上,所謂的公鑰就是將想要傳遞的資訊在編碼時加入質數,編碼之後傳送給收信人,任何人收到此資訊後,若沒有此收信人所擁有的金鑰,則解密的過程中(實為尋找素數的過程),將會因為找質數的過程(分解質因數)過久,使即使取得資訊也會無意義。
質數被利用在密碼學上,所謂的公鑰就是將想要傳遞的資訊在編碼時加入質數,編碼之後傳送給收信人,任何人收到此資訊後,若沒有此收信人所擁有的金鑰,則解密的過程中(實為尋找素數的過程),將會因為找質數的過程(分解質因數)過久,使即使取得資訊也會無意義。

題目分析:

題目:判斷1-1000之間有多少個素數,並輸出所有素數。
程式分析:
步驟1:得到1到1000之間的數,採用for(int i= 2;i<1000;i++)迴圈
步驟2:判斷一個數是否是素數
步驟3:輸出該數,並使得變數count++
步驟4:判斷是否到達1000,否的話回到步驟2
變數個數: 數字本身 m, 被除數 n ,加法器 i, 計數器 count
素數定義:除了1和它本身外,不能被其他自然數整除

程式碼塊:

import java.util.Scanner;

public class PrimeTest{
	
	public static void main(String[] args){
		
		//定義一個計數器用於統計素數的個數
		int count =0;
		
		//獲得1~n之間的素數,輸入一個n值
		System.out.println("請輸入一個大於2的數字作為區間上限 :");
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
			
		for(int i = 1;i < n; i++){
			if(isPrime1(i)){
				System.out.print(i+"\t");
				count++;
				if(count%10==0){
						System.out.println();
				}
			}
		}
		System.out.println("\r"+"1到"+n+"之間的素數個數\t"+count);
	}
	//建立一個方法用於判斷一個數是否是素數
	public static boolean isPrime1(int i){
		//定義一個變數用於判斷數是否是素數
		boolean t = false;
		
		//當數字時2的時候,是素數返回true
		if(i==2){
				t = true;
			}
		//當數字不是2的時候,進行進一步判斷
		for(int j = 2;j < i;j++){	
			if(j==(i-1)){
				t = true;
				}
			if((i % j)==0){
				break;
				}
			}
		return t;
	}
}

總結:

練習寫程式的第二天,現在看到題目終於有一點思路了,雖然思路不是十分的明確。今天解決的素數的問題,使用了MyEclipse中的bug的方法去除錯,然後找到方法的。

素數的定義
黎曼猜想

  • 第二天的學習思維導圖
    這裡寫圖片描述