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!
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP