注释比较详细了
/**
* 打印10000的所有素数(素数是指除了1和本身可以被整除外,不能被其他数整除的数)
*/
public class prime_number {
public static void main(String[] args) {
//用于判断是否为素数并决定是否输出的开关
boolean flag = true;
//用于记录个数,每10行换行
int c = 1;
//从1~100000依次判断是否为素数
for (int i = 3; i <= 100000; i++) {
//依次除以该数的平方根(范围在该数的小于值)
lea : for (int j = 2; j <= Math.sqrt(100000) && j < i; j++) {
//如果有可以除进的数而且不能为2
if (i % j == 0 && i != 2) {
//关闭开关
flag = false;
//终止内部循环(因为已经有可以除尽的数了)
break lea;
} else {
//不然就是素数,打开开关
flag = true;
}
}
//判断开关是否打开
if (flag) {
//若打开,就说明是素数,记录个数
c += 1;
//输出素数
System.out.print(i + "\t");
//如果素数每一行有十个了
if(c % 10 == 0)
//换行
System.out.println("\n");
}
}
}
}
大于1的正整数中,除了2和5之外,也就是个位是024568的都可以不考虑,就剩下个位是1379的,通过这个特征写遍历就能剔除很多无效数据了,然后对剩下的数据X进行判断,如果能在 2 - X的平方根 之间找不到能整除的数,那么这个数就是素数。
package com.csdn;
public class Solution {
// 判断是否是素数
public static boolean isPrime(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {// 程序默认2是素数,当j=2时,循环不执行
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
int n = 0;
// 1既不是质数也不是和数,使用i从2开始。
for (int i = 2; i <= 100000; i++) {
if (isPrime(i)) {
System.out.print(i + "\t");
++n;
// 每10个一行
if (n % 10 == 0) {
System.out.println();
}
}
}
}
}