一.使用数组
判断条件:只能被1和本身整除的称为素数。
嵌套循环,使每一个数都整除(1-x数本身)。
public static int[] suShu() {
int[] arr = new int[100];
int num = 0;//素数个数
boolean flag = true;//判定素数
//放入100个数
for(int i = 0; i < arr.length; i++) {
arr[i] = i+1;
//System.out.println(arr[i]);
}
//素数个数
for(int i = 0; i < arr.length; i ++) {
for(int j = 2; j < arr[i]; j ++) {
if(arr[i] % j == 0) {
//不是素数
//停止内循环 遍历下一个数
flag = false;
break ;
}//继续循环
}
if(flag) {
//是素数
num++;
}
//重置
flag = true;
}
//素数数组
int[] newarr = new int[num];
int n = 0;
for(int i = 0; i < arr.length; i ++) {
for(int j = 2; j < arr[i]; j ++) {
if(arr[i] % j == 0) {
//不是素数
//停止内循环 遍历下一个数
flag = false;
break ;
}//继续循环
}
if(flag) {
//是素数
newarr[n] = arr[i];
// System.out.print(arr[i] +" ");
n++;
}//重置
flag = true;
}
return newarr;
}
注意事项:
1.重置flag判断(很关键!!)
在使用嵌套for循环查找素数时,当内层遍历结束,并且flag的判断也结束时,需要重置flag的值。
否则,当数字4进入内循环改变flag值后,素数个数变量num的if判断语句无法被进入,只能统计123三个数据。
2.赋值新数组
在未知新数组长度的情况下,是无法创建一个新数组的(要调用数组长度变量arr.length时)。此时只能按照原方法依次输入新数组值。
3.其他判断条件
条件2:在区间(1,x/2)中找不到能整除素数x的整数;
条件3:在区间(1,sqrt(x))中找不到能整除素数x的整数;
主函数调用
public static void main(String[] args) {
//1-100素数
int[] num = suShu();
System.out.println("1-100素数个数为"+num7.length);
}
二.使用集合
集合的优点在于长度可变,即不需要事先知道长度才能创建。
public static void main(String[] args) {
//创建集合
ArrayList<Integer> list = new ArrayList<>();
int[] arr = new int[100];
boolean flag = true;
//放入100个数
for(int i = 0; i < arr.length; i++) {
arr[i] = i+1;
}
//素数个数
for(int i = 0; i < arr.length; i ++) {
for(int j = 2; j < arr[i]; j ++) {
if(arr[i] % j == 0) {
//不是素数
//停止内循环 遍历下一个数
flag = false;
break ;
}
//继续循环
}
if(flag) {
//是素数
list.add(arr[i]);
}
//重置
flag = true;
}
System.out.println("1-100素数个数为"+list.size());
}