废话不多说
一切言语,尽在注释中。
package my;
import java.util.Scanner;
/*
* 输出0-用户输入数字以内的素数
* 折半法
*
* */
public class Prime_Number {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int inputNum = 0; //定义一个用户输入数
System.out.println("请输入一个整数,求0到它以内的素数: ");
try {
if (!sc.hasNextInt()) //判断输入是否为整数
throw new Exception("请输入整数!!!"); //用户输入不为整数时抛出异常,自定义异常提示信息
else
inputNum = sc.nextInt(); //用户输入为整数时调用打印素数方法
printPrime(inputNum); //将用户输入的数字传递到打印素数方法中
} catch (Exception e) {
// e.printStackTrace(); //报红异常信息
System.out.println(e.getMessage()); //打印异常信息
}
}
/*打印素数方法*/
public static void printPrime(int num){
System.out.println(num + "以内的素数有以下: ");
for (int i = 2; i <= num; i++) { //i代表每次循环的被除数
for (int j = 2; j <= (i / 2); j++) { //折半去余数,时间复杂度减少(除数为被除数[偶数]的一半时能被2整除!!!)
if (i % j == 0) //如果能被整除,说明不是素数,则立即跳出本次内循环
break; //终止内循环
if (i % j !=0 && j == (i / 2)) { //如果不能被整除,且除数已经到了该被除数的一半时,说明该数是除数
System.out.print(i + " "); //打印该素数
}
}
}
}
}
代码运行截图