我有兩種方法可以在 java 方法中找出素數(shù) - 2 工作正常,但從方法 1 得到錯誤的輸出,可以幫助我在邏輯上做錯的地方。提前致謝我的整個代碼package prepare;import java.util.Scanner; public class Squar { //Method - 1 to find prime number boolean isPrime(int num){ int exp = (int)Math.sqrt(num); for(int i=2;i<exp;i++){ if(exp%2==0){ return false; } }return true; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); Squar s = new Squar(); System.out.println("From M1 "+s.isPrime(num)); scan.close(); System.out.println("From M2 "+s.isPrimeNumber(num)); } //Method - 2 to find prime number public boolean isPrimeNumber(int number) { if(number == 1){ return false; } if (number == 2 || number == 3) { return true; } if (number % 2 == 0) { return false; } int sqrt = (int) Math.sqrt(number) + 1; for (int i = 3; i < sqrt; i += 2) { if (number % i == 0) { return false; } } return true; }}對于輸入:63 實際輸出在素數(shù)中是假的,但從方法一輸出得到不同的 輸出63From M1 trueFrom M2 false
3 回答

HUWWW
TA貢獻1874條經(jīng)驗 獲得超12個贊
isPrime像這樣改變功能。
boolean isPrime(int num) {
int exp = (int) Math.sqrt(num);
for (int i = 2; i < exp; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
因為在 if 條件下,您正在檢查 exp%2 == 0. 但是這個語句在迭代時不會改變i < exp。所以這個邏輯應(yīng)該繼續(xù)num % i == 0
添加回答
舉報
0/150
提交
取消