素数就是在2~n-1的数中,能找到一个数能整除n,则n为素数。
所以用两个循环遍历就可以得到素数了,外层循环用来遍历2~n,内层循环用来遍历2~n-1。
但是在内层循环判断素数时,不需要从2~n-1一个一个判断,
因为,一个数化成两个数的乘积的形式时,总会有其中一个数小于等于这个数的开方
例如:16 = 2*8时,存在2小于等于4
24 = 3*8时,3小于Math.sqrt(24)
24 = 4*6时,4小于Math.sqrt(24)
所以得到内层for循环
for (int j = 2; j <= Math.sqrt(i); j++)
总体代码为
public class Test {
public static void main(String[] args) {
primeNum(888);
}
public static void primeNum(int n) {
//用于输出排版
int count = 0;
//从2开始找
for (int i = 2; i < n; i++) {
int temp = -1;
//测试2~i的开方是否有数能被i整除
for (int j = 2; j <= Math.sqrt(i); j++) {
//如果有i能被j整除,则此i不为素数,给此时temp为1,标记该数
if (i % j == 0) {
temp = 1;
break;
}
}
//没有标记的数就都是素数
if (temp == -1) {
System.out.print(i + "\t");
count++;
if (count % 5 == 0) {
System.out.println();
}
}
}
System.out.println("\n1~" + n + "的素数一共有" + count +"个");
}
}