c++自定义函数判断素数

输入一个正整数n,求第n小的质数,第n小就是从2开始的第n个。输入10输出 29。


#include <iostream>
#include <vector>
using namespace std;

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

int findNthPrime(int n) {
    int count = 0, num = 1;
    while (count < n) {
        num++;
        if (isPrime(num)) count++;
    }
    return num;
}

int main() {
    int n;
    cin >> n;
    cout << findNthPrime(n) << endl;
    return 0;
}

这个是筛质数的方法,用isprime。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7591619
  • 这篇博客你也可以参考下:c++求输入一个正整数N,求出这个数字存在多少个因子,以及因子之和。
  • 您还可以看一下 孙冉老师的C++入门课程课程中的 14.循环应用:求n项的和小节, 巩固相关知识点
  • 除此之外, 这篇博客: 第n小质数中的 输入一个正整数n,求第n小的质数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    格式
    输入格式
    一个不超过10000的正整数n
    输出格式
    第n小的质数
    样例
    输入样例
    10
    输出样例
    29

    分析
    容易产生误区,此题输入的是一个不超过10000的正整数,则要求至少要求到第10000个质数。不是求10000之间的质数。

    代码:
    第一种
    #include<stdio.h>
    #include<math.h>
    #define m 100000000 //定义大一点的数
    int main()
    {
    int i,j,n,count=0;
    scanf("%d",&n);
    for(i=2;i<=m;i++){
    for(j=2;j<=(int)sqrt(i);j++)
    if(i%j == 0)break;
    if(j>(int)sqrt(i))
    count++;
    if(count==n)
    break;
    }
    printf("%d\n",i);
    return 0;
    }

    第二种
    #include<stdio.h>
    #define max 1000000
    int prime[max];//这个数组存储,如果数字是素数就是1,不是素数则为0;
    int main(){
    for(int i=0;i<max;i++)
    prime[i]=1;
    prime[0]=prime[1]=0;//1和0不是素数
    for(int i=2;i<max;i++){
    if(prime[i]==1){//素数的倍数都不是素数,
    for(int j=i*2;j<max;j+=i)
    prime[j]=0;
    }
    }
    int n;
    int count=0,temp;
    scanf("%d",&n);
    for(int i=2;i<max;i++)
    {
    if(prime[i]==1)count++;
    if(count == n){
    temp=i;
    break;
    }
    }
    printf("%d",temp);
    return 0;
    }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

#include <iostream>
#include <math.h>

using namespace std;

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

int main() {
  int n;
  cin >> n;
  
  int count = 0;
  int num = 2;
  while(count < n) {
    if(isPrime(num)) {
      count++;
    }
    num++;
  }
  
  cout << num-1 << endl;

  return 0;
}