java 题目求高手解答

2025-01-02 07:01:03
推荐回答(4个)
回答1:

1楼的算法有些错误,i<=j/3是不正确的,应该是小于j的平方根(程序中取整)int zhongjian=(int)Math.sqrt(j);
2楼的算法虽然能执行,但是从平方根到j之间的循环属于无效循环,算法效率太差。
修改一楼代码后是正确的:
public static void judge(int j){
boolean isPrime=false;
int zhongjian=(int)Math.sqrt(j);
for(int i=2;i<=zhongjian;i++){
if(j%i==0){
System.out.println(j+"是一个合数!");
isPrime=true;
break;
}
}
if(!isPrime){
System.out.println(j+"是一个质数!");
}
}

回答2:

我来解释为什么是平方根吧
一个数a = b * c 那么必然 b<=a,c<=a;
如果说 b<=根号a,那么c必然>=根号a
既然有一个小的约数 那么必然大的约数也存在 根号a是一个分水岭
不知道表述清楚没

回答3:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class heshu {

public static void main(String[] args) {
System.out.println("press a number: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
while (!(str = br.readLine()).equals("exit")) {
try {
int num = Integer.parseInt(str);
if (isZhiShu(num)) {
System.out.println("质数");
}
} catch (NumberFormatException e) {
System.out.println("only input a number");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

private static boolean isZhiShu(int num) {
if (num == 0) {
System.out.println("我也忘了是不是质数了.");
} else {
for (int i=2; i if (num%i == 0) {
System.out.println("合数");
return false;
}
}
}
return true;
}

}

回答4:

呵呵 我是一楼的! 看了lkt1002、doorsky123二位的答案以后很受启发,那么答案应该是如lkt1002所写的那样 完全正确!
特别感谢doorsky123朋友的分析,讲得很清晰,学习了 ~~~!!