关于#c++#的问题,请各位专家解答!

为什么会出现这种警告⚠?求大老来回答一下

img


```c++

#include 
#include
bool f(int x)
{
    for (int i = 2; i < sqrt(x); i++)
        if (x % i == 0)return false;
    return true;
}
int main()
{
    long long sum = 1, a, i, j;
    for (i = 2; i < 50000; i++)
        if (f(i))
        {
            for (j = 1; j < 10000; j++)
                for (int h = 1; h < 1000; h++)
                {
                    a = i + j * h;
                    if (f(a))sum++;
                    else { sum = 1; break; }
                    if (sum == 10) {
                        printf("%d\n", j);
                        return 0;
                    }
                }
        }
    return 0;
}


```

供参考:

#include <cstdio>
#include <cmath>  //修改
bool f(long long x)//bool f(int x) 修改
{
    long long i;
    for (i = 2; i <= sqrt(x); i++) //for (i = 2; i < sqrt(x); i++)  修改
        if (x % i == 0) return false;
    return true;
}
int main()
{
    long long sum = 1, a, i, j, h; //修改
    for (i = 2; i < 50000; i++)
        if (f(i))
        {
            for (j = 1; j < 10000; j++)
                for (h = 1; h < 1000; h++)  //修改
                {
                    a = i + j * h;
                    if (f(a))sum++;
                    else { sum = 1; break; }
                    if (sum == 10) {
                        printf("%lld\n", j); //printf("%d\n", j); 修改
                        return 0;
                    }
                }
        }
    return 0;
}

因为j是long long型,类型不一样。你可以将%d 换成 %lld 试下。
%d 适合 int
%ld 适合 long

不知道你这个问题是否已经解决, 如果还没有解决的话:

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