C++遞迴實現素數判斷


給定一個整數作為輸入。目標是使用遞迴方法判斷輸入數字Num是否為素數。

要檢查一個數字是否為素數,從i=2遍歷到i<=Num/2。如果任何i都能被Num整除,則該數字不是素數,因為素數只能被1和自身整除。

示例

輸入 − Num = 32

輸出 − 32不是素數!

說明 − 如果我們從i=2遍歷到i<=32/2,那麼首先它將被2整除,這表明它不是素數。

輸入 − Num = 43

輸出 − 43是素數!

說明 − 如果我們從i=2遍歷到i<=43/2,那麼它將不會被2到21之間的任何數字整除。這表明它是素數。

下面程式中使用的方法如下

在這種方法中,我們使用遞迴函式checkPrime(int num1, int index),它接收輸入數字和索引,索引的值將從2到num1/2。

對於基本情況:如果num1<2,則返回1,因為它不是素數。

如果num1==2,則返回2,因為它是一個素數。

否則:如果(index<=num1/2),則我們達到了沒有索引能整除num1的點,所以返回1,因為這隻有素數才有可能。否則,使用result=checkPrime(num1, index+1)遞迴呼叫下一個索引。

  • 獲取輸入數字Num

  • 函式checkPrime(int num1,int index)接收輸入並返回1(如果數字是素數),否則返回0。

  • 如果num1<2,則返回0,因為小於2的數字不是素數。

  • 如果num1是2或3,則返回1,因為2和3是素數。

  • 如果num1%index <= num1/2,則返回1,因為直到num1/2沒有數字能整除num1,所以num1是素數

  • 使用result=checkPrime(num1, index+1)遞迴呼叫下一個索引。

  • 返回result。

  • 在main函式內列印結果。

示例

#include <bits/stdc++.h>
using namespace std;
int checkPrime(int num1, int index){
   if(num1<2){
      return 0;
   }
   if (num1 == 2 || num1==3){
      return 1;
   }
   if (num1 % index == 0){
      return 0;
   }
   if (index <= num1/2){
      return 1;
   }
   int result=checkPrime(num1, index+1);

   return (result);
}
int main(){
   int Num = 31;
   if (checkPrime(Num,2)==1){
      cout <<Num<<" is a Prime number !";
   }
   else{
      cout <<Num<<" is non Prime!";
   }

   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出

31 is a Prime number!

更新於: 2021年11月2日

6K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.