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!
广告