題目:判斷101-200之間有多少個素數,並輸出所有素數
這道題目,需要使用for循環去遍歷出所有的需要判斷的元素,並再次使用for循環,對元素進行是否是素數的判斷.
素數:只能被1和自身整除的數
那么就要去考慮如何寫判斷條件了.這道題目也花了我一些的功夫,明知道很簡單,但由於程序寫的太少和編程思想的缺少,墨跡了很久.
1)小於2的數(即1)不是素數
2)對於大於2的一個整數n,要判斷n能否整除2~(n-1),只要滿足了一次,這個n就肯定不是素數了.
看了網上的一些代碼,學到了一招,采用flag來記錄程序中的判斷的情況,對於菜鳥養成編程思維很有幫助.(本題中可以直接將true或者false返回)
1 //打印出一個區間內的素數及其個數 2 private static void method() { 3 int count = 0; 4 for(int i = 2;i <= 200;i++){ 5 boolean flag = true; 6 for(int j = 2;j < i;j++){ 7 if(i % j == 0){ 8 flag = false; 9 break; 10 } 11 } 12 if(flag == true){ 13 count++; 14 System.out.println(i); 15 } 16 } 17 System.out.println(count); 18 }
1 //判斷輸入的一個數n是否是素數(讓n和(2-n-1)的數都做一遍取余運算) 2 private static boolean method1(int n) { 3 if(n < 2){ 4 return false; 5 } 6 for(int i = 2;i < n;i++){ 7 if(n % i == 0){ 8 return false; 9 } 10 } 11 return true; 12 //return true; 13 }
搜索過后發現,網上有很多的實現的方法,一種比一種簡單,代碼簡化了很多.
其中的一種簡化是,減少判斷的區間,可以選擇直接將偶數的情況在一開始就去除掉.
1 //改進算法:可以直接將偶數的情況去除掉 2 private static boolean method2(int n){ 3 if(n < 2) 4 return false; 5 if(n % 2 == 0) 6 return false; 7 for(int i = 3;i < n;i++){ 8 if(n % i == 0) 9 return false; 10 } 11 return true; 12 }
其余的簡化算法我沒有一一去研究.