簡體   English   中英

如何找到最近的素數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM