算出指定数量的素数 , 首先我们需要数组来保存素数 , 然后用从小到大已经保存的素数对要进行判断的数进行取余判断是否是素数 , 然后进行累加保存到数组里面.
第一步:
输入要得到多少数量的素数 , 然后把保存数组的长度得出
Scanner in = new Scanner(System.in);
System.out.println("请输入你要得到前几个素数:");
int x=in.nextInt();
int [] numbers=new int[x];
第二步:
当保存的数组够数量的时候需要结束 , 来一个for 循环计算数量 ,同时每判断一个数 , 就加 1
int cnt =3
最小的素数是2 , 我们已经知道 , 所以从 3 开始.
for(int i=1;i<x;cnt++){
numbers[i++] = cnt;
}
每一个经历过考验的数字 , 就能够被判定为素数 . 那么就把他保存到 numbers[ i ] 里面 , 同时我们要将 i ++ , 用于存储下一个素数 . (这里的 i ++ 是先把当前的 i 参加运算, 然后才加一的)
第三步:
我们数字也有了 , 素数数组也有了 , 接下来 就让 cnt 来接受考验 , 看他能不能通过是不是素数的考验 , 考验的工具就是 , 我们建立起的 素数数组 , 从素数数组的第一个数开始考验 , 那么我们就需要for循环遍历已经得出的素数表 .
MAX:
for(int i=1;i<x;cnt++){
for(int p=0;p<i;p++){
if(cnt % numbers[p]==0){
continue MAX;
}
}
numbers[i++] = cnt;
}
这里注意一个细节 , 当我们有一个cnt进入if 循环的时候 , 说明我们不能要那个 cnt , 也就是我们要让下一个 cnt 进来接受考验 , 并且此时不是素数那个 cnt 也不能保存在数组里面 ,我们首先想到的是break, 当我们用break 的时候 , 就会跳出最里面的 for(int p=0;p<i;p++) 循环 . 但是接下来就是 该运行 numbers[i++] = cnt; 所以还是将我们不需要的cnt 加到素数数组里面了.
continue MAX;
所以我们需要的是:遇到不是素数的数的时候 , 直接不保存到数组 , 就是不运行 for(int p=0;p<i;p++){ } ,直接运行
for(int i=1;i<x;cnt++) { }
所以我们在for(int i=1;i<x;cnt++) { }
前面加了一个名字 , 就是 MAX:
直接在循环里面 , 指名道姓的 说 continue MAX;跳过本次循环 , 我要运行 MAX: 的下一次循环 ,就可以了 , 这样我们就把要得到的素数全保存在数组里面了 .
下面就是我们的遍历输出了 利用 for -case 循环
for(int k:numbers){
System.out.print(k+"\t");
}
第五步: 源代码如下:
import java.util.Scanner;
public class Main_88{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入你要得到前几个素数:");
int x=in.nextInt();
int [] numbers=new int[x];
numbers[0] = 2;
int cnt=3;
MAX:
for(int i=1;i<x;cnt++){
for(int p=0;p<i;p++){
if(cnt % numbers[p]==0){
continue MAX;
}
}
numbers[i++] = cnt;
}
System.out.println("您要的素数是:\n");
for(int k:numbers){
System.out.print(k+"\t");
}
}
}