Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 소수에 대한 재귀 프로그램

<시간/>

입력으로 정수가 주어집니다. 목표는 재귀를 사용하여 입력 숫자 Num이 소수인지 아닌지를 찾는 것입니다.

숫자가 소수인지 확인하려면 i=2에서 i<=Num/2로 순회를 시작합니다. i가 Num으로 완전히 나눌 수 있는 경우 소수는 1과 숫자 자체로만 나눌 수 있으므로 소수가 아닙니다.

예시

입력 - 숫자 =32

출력 − 32는 프라임이 아닙니다!

설명 − i=2에서 i<=32/2로 순회를 시작하면 처음에는 2로 완전히 나누어 소수가 아님을 알립니다.

입력 - 숫자 =43

출력 − 43은 소수입니다!

설명 − i=2에서 i<=43/2로 탐색을 시작하면 2와 21 사이의 어떤 수로도 나눌 수 없습니다. 이는 소수임을 알려줍니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서 우리는 2에서 num1/2까지의 값을 취하는 입력 숫자와 인덱스를 취하는 재귀 함수 checkPrime(int num1, int index)를 사용하고 있습니다.

기본 경우-:num1<2이면 소수가 아니므로 1을 반환합니다.

num1==2이면 2를 소수로 반환합니다.

Else:- if(index<=num1/2) 그런 다음 num1을 완전히 나눈 인덱스가 없는 지점에 도달했으므로 소수에 대해서만 가능하므로 1을 반환합니다. 그렇지 않으면 result=checkPrime(num1, index+1을 사용하여 다음 인덱스에 대해 재귀합니다. )

  • 입력 번호 Num 가져오기

  • 함수 checkPrime(int num1,int index)는 입력을 받아 숫자가 소수이면 1을 반환하고 그렇지 않으면 0을 반환합니다.

  • num1<2이면 2보다 작은 숫자는 소수가 아니므로 0을 반환합니다.

  • num1이 2 또는 3이면 2와 3이 소수이므로 1을 반환합니다.

  • num1%index가 <=num1/2이면 num1/2까지 1을 반환합니다.

  • result=checkPrime(num1, index+1)을 사용하여 다음 인덱스에 대해 재귀합니다.

  • 결과를 반환합니다.

  • 메인 내부에서 얻은 결과를 인쇄합니다.

#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!