[英]How to find the nearest prime number?
此方法的目標是找到小於傳遞值的最近素數。 任何小於 3 的值都是未定義的行為,所以我只返回 -1。 問題在於當我傳入值 5、20、100 和 1 時,這是輸出:
Passed in 5 Expected 3: 5
Passed in 20 Expected 19: 19
Passed in 100 Expected 97: 97
Passed in 1 Expected -1: -1
這是方法:
int Hash::nearestPrime(int num){
if(num <= 3){
return -1;
}
for(int i = 2; i < num; i++){
if(num == 3){
return 3;
}
if(num % i == 0 && num != i){
num--;
i = 2;
}
}
return num;
}
您可以循環並遞減直到找到下一個,方法是讓函數確定一個值是否為素數。
#include <iostream>
int prime (int n)
{
int i;
for (i = 2; i < n; i++)
if (n % i == 0) return 0;
return 1;
}
int run (unsigned int n)
{
while (!prime (--n));
return n;
}
int main ()
{
std::cout << run (3);
return 0;
}
你的方法是對的,但有一個簡單的錯誤。
在if
條件中分配i = 1
而不是i = 2
。 因為如果你分配 2 那么i++
下一個檢查值將從3開始。 但是您需要從2進行檢查。
int Hash::nearestPrime(int num){
if(num <= 3){
return -1;
}
for(int i = 2; i < num; i++){
if(num == 3){
return 3;
}
if(num % i == 0 && num != i){
num--;
// mistake in this line
i = 1;
}
}
return num;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.