要求函数返回比形参大的最小的素数,但我这样调用,j永远等于n,如何更改

#include  "stdio.h"
int  fun(int n)
{
    int i, j = n, pd = 1;
    for (i = 2; i < n; i++) {
        if (j % i == 0) {
            pd = 0;
        }
    }
    if (pd == 1) {
        return j;
    }
    else
        fun(j + 1);
}
void  main()
{
    int n;
    scanf("%d", &n);
    printf("%d", fun(n));
}

把j=n改成j=n+1应该就行了

#include  "stdio.h"
int  fun(int n)
{
    int i, j = n+1, pd = 1;
    for (i = 2; i < n; i++) {
        if (j % i == 0) {
            pd = 0;
        }
    }
    if (pd == 1) {
        return j;
    }
    else
        return fun(j + 1);
}
void  main()
{
    int n;
    scanf("%d", &n);
    printf("%d", fun(n));
}

#include <stdio.h>
using namespace std;

bool func(int n){
    if(n < 2) return false;
    if(n == 2 || n == 3 || n == 5 || n == 7) return true;
    int i;
    for(i = 2; i * i <= n; i++){
        if(n % i == 0) return false;
    }
    return true;
}

int main(){
    int n;
    scanf("%d",&n);
    int i;
    for(i = n + 1; ; i++){
        if(func(i)){
            printf("%d\n", i);
            break;
        }
    }
    return 0;
}

有用记得采纳嗷

呃我写完发现你的代码是对的,既然j跟n一样那就不用j了呗,直接fun(n+1)不是一样的吗



#include  "stdio.h"
int  fun(int n)
{
    int pd = 1;
    while (pd == 1)
    {
        pd = 0;
        n++;
        for (int i = 2; i < n; i++)
        {
            if (n%i == 0)
            {
                pd = 1;
                break;
            }
        }
        if (pd == 0)
            return n;
    }
}
void  main()
{
    int n;
    scanf_s("%d", &n);
    printf("%d", fun(n));
}

img


首先这个应该是需要双层循环的。
核心流程:
1.通过双层循环筛选素数,将素数存入数组,
2.然后循环遍历数组与形参值比较,如果有比形参大的,break;并且定义个flag作为标记,将该数组元素的下标赋值给flag
3.之后return返回对应下标的数组元素值即可。

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,帮忙点个采纳!