题目:判断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 }
其余的简化算法我没有一一去研究.