【问题标题】:C++ Finding the nth prime numberC++寻找第n个素数
【发布时间】:2019-10-13 13:54:21
【问题描述】:

我试图找到第 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;
}

【问题讨论】:

  • 这个isPrime函数会错误地将小于等于1的数字判断为素数。
  • isPrime 函数中,当你执行answer = false 赋值时,为什么还要继续循环呢?为什么不直接return false
  • 你应该在main函数的循环中增加counter 两次吗?
  • 是的,我应该这样做,我在 answer=false 之后返回 false; @Someprogrammerdude

标签: c++ numbers


【解决方案1】:

改进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功能:

  • 仅当找到素数时才增加计数器。
  • 计算找到的素数,然后检查总数。
  • 检查数字而不是计数器是否是素数。
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;
}

【讨论】:

    【解决方案2】:

    感谢@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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 2014-01-27
      • 2012-01-07
      • 2013-01-22
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多