рекурсивно проверьте, является ли число простым

Я пытаюсь проверить, является ли число простым (разделив его на все числа ниже n). Вот моя попытка :

bool isPrime(int n, int d){
    if (d == 1)
        return true;
    else{
        if (n % d == 0){
            return false;
        }
        else
            return (n,d-1);
    }
}

n-число, чтобы проверить, является ли оно простым. d-число ниже n, при вызове функции n-1.

пожалуйста, помогите мне понять, что я делаю неправильно.

4 ответов


вы не рекурсивно вызываете свою функцию. return (n,d-1); должно быть return isPrime(n,d-1);


пожалуйста, не пишите это таким образом! Для более или менее нормального ввода рекурсивный подход съест весь стек! Просто идите старым хорошим итеративным путем.

конечно, решение грубой силы не является самым быстрым. Вы могли бы попробовать Эратосфен решето, или некоторые из многочисленных более продвинутые тесты.


вам просто нужно включить условие для проверки 1, если оно простое или нет.

bool isPrime(int n, int d)
{
    if(n<2)
        return 0;
    if(d == 1)
        return true;
    else 
    {
        if(n % d == 0) 
            return false;
        else
            return isPrime(n, d - 1);
    }
}

#include<iostream>
using namespace std;
bool findPrime(int x,int y);
int main()
{int n;
cout<<"enter the number to be checked \n";
cin>>n;
  int x=findPrime(n,n-1);
  if(x==1)
    cout<<"its a prime number";
  else
    cout<<"its not prime";
}
bool findPrime(int x,int y)
{
    if(x%y==0&&y!=1)
    {
        return false;
        }
    else{
        if(y==1)
        return true;
    else
        return findPrime(x,y-1);
}
}