C ++ Нахождение n-го простого числа - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь найти n-е простое число. Например: вход 1 - результат 2, вход 2 - результат 3, вход 3 - результат 5 ...

Моя функция isprime в настоящее время работает, но я не могу понять это, должно быть что-то не так, пожалуйста, помогите,спасибо:)

/*
      Finding the nth Prime Number
              Yasin OSMAN
*/

//Including Libraries
#include <iostream>
using namespace std;

//Defining a global counter
int counter = 0;
/*
         Defining Functions
*/

//isPrime Function (returns true if the given number is prime)
bool isPrime(int n) {
    bool answer = true;
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            answer = false;
        }
    }
    return answer;
}

int main() {
    int userInput;
    cout<<"Please indicate which prime number do you want to see: ";
    cin>>userInput;

    for(int i=0;i<=userInput;i++){
        if(isPrime(counter)){
            if(counter==userInput){
                cout<<counter<<"th prime number is : "<<i<<endl;
            }
            counter++;
        }
        counter++;
    }

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Благодаря @ MikeCAT

я изменил свою функцию isPrime для чисел, которые меньше 2,

bool isPrime(int n) {
    bool answer = true;
    if(n<2){
        answer=false;
        return answer;
    }
    if(n>=2){
        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                answer = false;
                return answer;
        }
    }
    return answer;
    }
}

, а также сделал nthPrime функцией,

int nthPrime(int n){
    double i;
    for(i=2;counter<n;i++){
        if(isPrime(i)){
            counter++;
        }
    }
    return i-1;
}

и для отображения результата я использовал следующий код:

int userInput;
    cout<<"Please indicate which prime number do you want to see: ";
    cin>>userInput;

    cout<<counter<<"th prime number is : "<<nthPrime(userInput);
    return 0;

Пример вывода: Пожалуйста, укажите, какое простое число вы хотите видеть: 5 5-е простое число: 11

0 голосов
/ 13 октября 2019

Для улучшения функции isPrime:

  • числа меньше 2 не будут простыми, поэтому сначала отклоните их.
bool isPrime(int n) {
    if (n < 2) return false; // add this line
    bool answer = true;
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            answer = false;
        }
    }
    return answer;
}

Для улучшенияmain function:

  • Увеличивать счетчик только в том случае, если найдено простое число.
  • Подсчитать найденные простые числа, а затем проверить общее число.
  • Проверить,число, а не счетчик, является простым.
int main() {
    int userInput;
    cout<<"Please indicate which prime number do you want to see: ";
    cin>>userInput;

    for(int i=0, counter=0;counter<=userInput;i++){ // note: the global "counter" is shadowed here
        if(isPrime(i)){
            counter++;
            if(counter==userInput){
                cout<<counter<<"th prime number is : "<<i<<endl;
            }
        }
    }

    return 0;
}
...