难题不会,希望大家能帮我找到解题关键

img

img


有没有兄弟能用解答一下程序啊,我只会求10000以内的素数,但是接下来的要求是取第n个素数,我又该怎么写这个程序呢?能不能就在我写这个程序上修改呢?

从2开始找素数,找到第n个就行了

#include <stdio.h>
int isprime(int n)
{
    for(int i=2;i<=n/2;i++)
        if(n%i==0)
            return 0;
    return 1;
}
int main()
{
    int n,m=1;
    scanf("%d",&n);
    while(n>0)
    {
        m++;
        if(isprime(m) == 1)
            n--;
    }
    printf("%d",m);
    return 0;
}

#include<iostream>
using namespace std;
bool pd(int x)
{
    if(x==2) return true;
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0)
        return false;
    }
    return true;
}
int main()
{
    int m;
    cin>>m;//求第m个质数 
    int count=0; 
    int x=2;
    while(count!=m)
    {
        if(pd(x))
        count++;
        x++;
    }
    cout<<x-1;
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

望采纳,下列代码可以完成,已添加详细说明和注释。

代码过程为:

  • 首先,定义一个函数 isprime,这个函数接收一个整数参数 n,并判断它是否是一个素数。在函数内部,使用循环来遍历 2 到 n/2 的所有数字,如果 n 能被任意一个数字整除,则返回 0,否则返回 1。
  • 在 main 函数中,首先使用 scanf 函数从标准输入读入一个数字 n,然后定义了一个整数变量 m 并初始化为 1。然后使用一个循环来遍历所有大于 1 的数字,如果 m 是一个素数,则将 n 减 1,并判断 n 是否大于 0。如果 n 小于等于 0,则跳出循环。
  • 最后,使用 printf 函数将 m 的值输出到标准输出,并使用 return 0 退出 main 函数。
#include <stdio.h>

// 判断一个数是否为素数
int isprime(int n)
{
    // 遍历 2 到 n/2 的所有数字
    for(int i=2;i<=n/2;i++)
        // 如果 n 能被 i 整除,返回 0
        if(n%i==0)
            return 0;
    // 否则返回 1
    return 1;
}

int main()
{
    int n,m=1;
    // 从标准输入读入一个数字 n
    scanf("%d",&n);
    // 遍历所有大于 1 的数字
    while(n>0)
    {
        m++;
        // 如果 m 是一个素数,将 n 减 1
        if(isprime(m) == 1)
            n--;
    }
    // 输出 m 到标准输出
    printf("%d",m);
    // 退出 main 函数
    return 0;
}