[英]Prime Number checker is not working
這是一個函數的代碼,如果輸入為素數,則應返回true,否則返回false。
這就是我打算的工作方式:假設y = 7,循環從n = 1開始。 由於1(n)小於7(y),因此循環可以迭代。 程序檢查y除以n是否有0的余數,這意味着n是y的因數。 如果為真,那么它將檢查該因子是否等於1或y(7),因為如果它們不等於1,則意味着y除了自身和1之外還有更多因子,這意味着它不是素數,因此它應該自動結束函數並返回false。 但由於7只有兩個因子1和7,並且它們等於1或自身(y),因此在循環結束后,它應該返回true。
我不明白為什么它不起作用。
public static boolean checkIfPrime(long y) {
for ( long n =1L; n <= y; n++) {
if(y%n == 0) {
if( n != 1L || n != y) {
return false;
}
}
}
return true;
}
經過一些優化,代碼將像這樣
static boolean isPrime(long n){
long lim = (long) Math.sqrt(n);
if(n%2 == 0 && n != 2)
return false;
for (int i = 3; i <= lim; i=i+2)
if(n%i == 0)
return false;
return true;
}
這段代碼:
在n <= y中刪除等於運算符。 從2開始循環。它必須是這樣的。 (long n = 2; n <y; n ++)
對於您要實現的目標,我認為偽代碼應如下所示:
set a flag = true;
Loop from 2 to y-1{
if(y%n==0){
flag = false
break; // Very important
}
}
check flag condition & return (if some othe computation is required) or just return flag
if(n!= 1L || n!= y):不必要在每次迭代中添加檢查條件。 盡量避免它。
為什么使用標志代替直接返回語句? 只是偏愛,在這種情況下,直接回報肯定會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.