求大于n的最小质数,JAVA
题目
编写一个方法,输出大于某个正整数n的最小的质数
比如:这个正整数n是2
也就是要输出:大于2的最小的质数,结果就是3
比如:这个正整数n是9
也就是要输出:大于9的最小的质数,结果就是11
大于11的最小的质数是:13
思路分析
思路:
首先,系统一定会先给你一个“正整数n”,然后你基于
这个n往后++,每加1得到的新数m判断一下是否为质数。
分析:
最主要的功能就是判断m是否为质素,在此基础上进行优化。
该代码使用两个方法实现需求:一个方法是对数进行判断是否为质数;另一个方法是对数进行+1操作和输出质数的功能。通过一个isZhiShu方法返回的Boolean值,实现输出的方法进行是否+1与输出
最初源码
public class Homework2{
public static void main(String[] args){
/*
// 假设目前系统给了一个正整数n,n为5
int n = 5;
// 请找出大于5的最小的质数
while(true){
n++; // n自加1
// 判断此时的n是否为质数
boolean flag = isZhiShu(n);
if(flag){
System.out.println(n);
break;
}
}
*/
// 对一个单独的方法进行测试
/*
boolean flag = isZhiShu(6);
System.out.println(flag ? "质数" : "非质数"); // true
*/
printZuiXiaoZhiShu(5);
printZuiXiaoZhiShu(10);
printZuiXiaoZhiShu(12);
printZuiXiaoZhiShu(100);
}
// 这方法就是用来打印最小质数的。
public static void printZuiXiaoZhiShu(int n){
while(true){
n++; // n自加1
// 判断此时的n是否为质数
boolean flag = isZhiShu(n);
if(flag){
System.out.println(n);
break;
}
}
}
// 定义一个专门的方法,来判断某个数字是否为质数
// 这个方法的形参是:被判断的数字num
// 这个方法的返回值类型是true表示是质数,是false表示非质数。
public static boolean isZhiShu(int num){
// 你怎么判断num是否是一个质数
// 质数只能被1和自身整除
for(int i = 2; i < num; i++){
if(num % i == 0){
return false;
}
}
//程序能够执行到此处说明num已经是质数了。
return true;
}
}
优化
public class Homework22{
public static void main(String[] args){
printZuiXiaoZhiShu(7);
}
public static void printZuiXiaoZhiShu(int n){
while(!isZhiShu(++n)){
}
System.out.println(n);
}
public static boolean isZhiShu(int num){
for(int i = 2; i < num; i++){
if(num % i == 0){
return false;
}
}
return true;
}
}
对比
public static void printZuiXiaoZhiShu(int n){
while(true){
n++; // n自加1
// 判断此时的n是否为质数
boolean flag = isZhiShu(n);
if(flag){
System.out.println(n);
break;
}
}
}
public static void printZuiXiaoZhiShu(int n){
while(!isZhiShu(++n)){
}
System.out.println(n);
}
分析:第二种方法直接通过调用Boolean返回值使while判断是否循环结束;而第一种方法是把Boolean返回值在赋给一个Boolean的变量,通过变量判断if语句的执行,由break结束循环。
结论
对代码进行优化不仅可以是代码更美观简洁,还可以使用更少的内存,对运行速率有一定的提升。但是我们的目的只有一个就是通过代码实现功能,而且对代码进行优化也是一个日积月累的过程,希望大家都可以写出最美观,最简洁,运行效率最高的代码。
附:博主源码
public class FindPrimeNumber{
public static void main(String[] args){
java.util.Scanner s=new java.util.Scanner(System.in);
System.out.print("请输入一个正数:");
int num=s.nextInt();
if(!checkNumber(num)){
System.out.println("error");
return;
}
System.out.println("该质数为:"+primeNumber(num));
}
public static boolean checkNumber(int x){//判断输入是否正确
if(x<=0)
return false;
else
return true;
}
public static int primeNumber(int x){//求质数
for(int i=x+1;;i++){
for(int j=2;j<=i/2;j++){
if(i%j==0){//判断是否为质数
break;
}
else if(j==i/2){
return i;
}
}
}
}
}