public boolean isPrimeNum (int n) {
boolean isPrime= true;
for( int i=2; i<= n; i++) {
if( n%i==0) {
isPrime= false;
}
isitPrime= true;
if(isPrime)
System.out.println("its a prime number");
else
System.out.println("its a composite number"); }
}
我试图写这个方法来检查数字是素数还是复数,但我不确定它是否正确。任何形式的帮助都将受到赞赏,并提前感谢。
答案 0 :(得分:0)
这是您重构的代码。如果您有任何疑问,请随时发表评论。
class PrimeChecker { //Has to be in a class
public boolean isPrimeNum(int n) {
boolean isPrime=true;
for (int i=2; i < n; i++) { //Has to be i < n instead of i <= n, every number can be divided by itself
if (n%i==0) {
isPrime=false;
break; //Note you can break then
}
} //You were missing this
//Removed : isitPrime= true; makes absolutely no sense
if(isPrime) {
System.out.println("its a prime number");
return true; //Breaks, you wont need else anymore
} //You were missing these again
System.out.println("its a composite number");
return false;
}
}
答案 1 :(得分:0)
你可以通过检查模数(%)直到&lt; =(n / 2)作为一个数字的最大因子(不包括它自己)总是小于或等于它的一半来使它有点(非常轻微)更高效,即,(int i = 2; i <= n / 2; i ++); 哦,分别检查2和3:)
答案 2 :(得分:-1)
您应该谷歌搜索此类问题。 但是,我正在回答一种寻找素数的优化方法
private static boolean isPrimeNum(int n){
if(n==2 || n==3) return true;
if(n%2==0 || n%3==0) return false;
for(int i=5;i<=Math.sqrt(n);i=i+2){
if(n%i==0) return false;
}
return true;
}