Я решаю простую задачу, чтобы проверить, является ли число простым или нет. Я пробовал использовать простой подход с помощью рекурсии, но когда я пытался использовать bool, он всегда печатал Да . Что мне не хватает?

#include<iostream>
bool isPrime(int);
using namespace std;
// int isPrime(int n){
//     if(n<=0  or n==1){
//         cout<<"Invalid";
//     }

//      for(int i=2;i<n;i++){
//              if (n%i==0)
//              {
//                 cout<<"No";
//                 return 0;
//              }
            
//          }
//          {
//              cout<<"Yes";

//          }
         // using bool 
    bool isPrime(int n)
    { 
        bool Prime;
         if( n==0 or n==1){     
             Prime=false;

         }
         else{
             for(int i=2;i<n;i++){
                 if(n%i==0){

                      Prime = false;
                      break;                  
                              }
             }
         }
       
    }

         




int main(){
    int n;
    cin>>n;  //7
    bool Prime = true;
   isPrime(n);
         if(Prime)
                         cout<<"Yes"<<endl;

         
         else
               cout<<"No"<<endl;

         
   
   return 0;
}
c++
-2
Lakshya Lalotra 21 Авг 2021 в 19:01

2 ответа

Лучший ответ

В вашем коде есть две переменные с именем Prime, и они никак не связаны. Каждый из них является локальной переменной другой функции. Локальные переменные функции не видны вне этой функции.

Есть несколько способов исправить ваш код. Ваша функция объявлена ​​как возвращающая логическое значение (bool isPrime(int n)), но она ничего не возвращает. Пусть вернет обещанное значение:

bool isPrime(int n)
{ 
  if (n <= 1) {     
    // Return early for the trivial cases
    return false;
  }

  // Normal cases
  for (int i = 2; i < n; i ++) {
    if (n % i == 0) {
      // Divisible by `i` => not prime
      return false;
    }
  }

  // Does not have dividers => prime
  return true;
}

Теперь использовать функцию очень просто:

int main(){
  int n;
  cin >> n;
  
  if (isPrime(n)) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }

  return 0;
}
1
axiac 21 Авг 2021 в 16:15

Я разработал код, и проблема, с которой я столкнулся, заключалась в том, что я не указал параметр для Prime().

Вот мой отлаженный код, и он отлично работает

#include<iostream>
// #define mod 1000000009
bool isPrime(int);
using namespace std;
// int isPrime(int n){
//     if(n<=0  or n==1){
//         cout<<"Invalid";
//     }

//      for(int i=2;i<n;i++){
//              if (n%i==0)
//              {
//                 cout<<"No";
//                 return 0;
//              }
            
//          }
//          {
//              cout<<"Yes";

//          }
         // using bool 
    bool isPrime(int n, bool &Prime)
    { 
         if( n==0 or n==1){     
             return false;

         }
         else{
             for(int i=2;i<n;i++){

                 if(n%i==0){

                      Prime = false;
                    //   break;                  
                              }
             }
         }
       
    }
 
         



int main(){
  int n;
  cin >> n;
  bool Prime = true;
  isPrime(n, Prime);
  if (Prime) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
  // isprime(n);

  return 0;
}
0
Lakshya Lalotra 21 Авг 2021 в 17:29