輸出100內所有質數

輸出100內所有質數

質數:素數,只能被1和他本身整除的自然數。

方法一

class Test {
	public static void main(String[] args) {	
	
		boolean isFlag = true;//標識i是否被j除盡,一旦除盡,重新定義其值	
	
		for(int i = 2;i <= 100;i++){//遍歷100以內的自然數	
		
			
			for(int j = 2;j < i;j++){//j:被i除去
				
				if(i % j == 0){
					isFlag = false;
				}
				
			}
			if(isFlag == true){
				System.out.println(i);
			}
			//對isFlag重置
			isFlag = true;
		}
	}
}

對方法一進行優化

						
class Test {
	public static void main(String[] args) {
		
		boolean isFlag = true;//標識i是否被j除盡,一旦除盡,修改其值
		int count = 0;//記錄質數的個數

		//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
		long start = System.currentTimeMillis();

		for(int i = 2;i <= 100000;i++){//遍歷100000以內的自然數
			
			//優化二:對本身是質數的自然數是有效的。
			//原先的for(int j = 2;j < i;j++){//j:被i去除
			//優化後
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,調用math中的一個2方法。
				
				if(i % j == 0){ //i被j除盡
					isFlag = false;
					break;//優化一:只對本身非質數的自然數是有效的。
				}
				
			}
			//
			if(isFlag == true){
				//System.out.println(i);
				count++;
			} 
			//重置isFlag
			isFlag = true;
		
		}

		//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
		long end = System.currentTimeMillis();
		System.out.println("質數的個數爲:" + count);
		System.out.println("所花費的時間爲:" + (end - start));//17110 - 優化一:break:1546 - 優化二:13

	}
}

方法二

class Test {
	public static void main(String[] args) {	
	
	
		for(int i = 2;i <= 100;i++){//遍歷100以內數	
		
			boolean isFlag = true;//標識i是否被j除盡,一旦除盡,重新定義其值	
			
			for(int j = 2;j < i;j++){//j:被i除去
				
				if(i % j == 0){
					isFlag = false;
				}
				
			}
			if(isFlag == true){
				System.out.println(i);
			}
		}
	}
}

方法三(直接在方法一優化的基礎上修改)

class Test {
	public static void main(String[] args) {
		
		
		int count = 0;//記錄質數的個數

		//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
		long start = System.currentTimeMillis();

		label:for(int i = 2;i <= 100000;i++){//遍歷100000以內的自然數

			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,調用math中的一個方法,開根號。
				
				if(i % j == 0){ //i被j除盡
					continue label;//如果發現直接被除盡,重新回到label,
				}
				
			}
			//能執行到此步驟的都是質數
			count++;
		}

		//獲取當前時間距離1970-01-01 00:00:00 的毫秒數
		long end = System.currentTimeMillis();
		System.out.println("質數的個數爲:" + count);
		System.out.println("所花費的時間爲:" + (end - start));//17110 - 優化一:break:1546 - 優化二:13

	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章