我不知道';我不知道为什么我的C代码总是返回128

我不知道';我不知道为什么我的C代码总是返回128,c,C,我想写一个代码来确定小于n的最大素数。我不知道为什么我的代码总是返回128,不管n是什么输入 这就是我所做的。输入n,然后为i从1到n运行循环。然后运行嵌套在第一个循环中的另一个for循环,对于j,从1到i的平方根。如果i可被j整除,则中断嵌套循环,否则将最大素数指定给i。重复一遍 #include <stdio.h> int main(void) { long i, j, n, largest_prime; printf("Enter a number: ");

我想写一个代码来确定小于n的最大素数。我不知道为什么我的代码总是返回128,不管n是什么输入

这就是我所做的。输入n,然后为i从1到n运行
循环。然后运行嵌套在第一个循环中的另一个
for
循环,对于j,从1到i的平方根。如果i可被j整除,则中断嵌套循环,否则将最大素数指定给i。重复一遍

#include <stdio.h>
int main(void)
{
    long i, j, n, largest_prime;
    printf("Enter a number: ");
    scanf("%ld", &n);
    for (i = 1; i <= n; i++) {
        for (j = 1; j*j <= i; j++) {
            if (i % j == 0)
                break;
            else
                largest_prime = i;
        }
    }
    printf("The largest prime is: %ld", largest_prime);
    return 0;
}
#包括
内部主(空)
{
长i,j,n,最大_素数;
printf(“输入一个数字:”);
scanf(“%ld”、&n);
对于(i=1;i
  • 首先,内部循环应该以2开始,而不是1。即
    j=2
  • 在其他情况下,你不应该使
    maximum\u prime=i
    ,也就是说,一旦你发现任何数字都不能除
    i
    ,那么它就是一个错误的素数
  • 下面我修改了您的代码,以找到小于n的最大素数。但这可以通过为(i=n;i>=2;i--)创建外部循环
    ,并在遇到素数时立即中断循环来进一步改进

    int main(void)
    {
        long i, j, n, largest_prime;
        printf("Enter a number: ");
        scanf("%ld", &n);
        for (i = 1; i <= n; i++) {
            int isPrime = 1;
            for (j = 2; j*j <= i; j++) {
                if (i % j == 0){
                    isPrime = 0;
                    break;
                }
            }
            if(isPrime==1)largest_prime = i;
        }
        printf("The largest prime is: %ld", largest_prime);
        return 0;
    }
    
    int main(无效)
    {
    长i,j,n,最大_素数;
    printf(“输入一个数字:”);
    scanf(“%ld”、&n);
    
    对于(i=1;i是学习如何使用调试程序的时候了。您从未分配给
    maximum_prime
    ,因此打印它是一种未定义的行为。您刚好得到
    128
    。您的赋值语句永远无法到达,因为当达到if语句时,
    i%j==0
    总是正确的。请考虑以下条件:你应该将哪个
    最大素数设置为
    i
    。然后仔细检查你的代码。@khanhtan1002,正如@Paulpro所说,
    i%j
    也是
    0
    ,因为
    j=1
    。建议
    长最大素数=某物;
    防止
    printf中的UB(“%ld”,最大素数)当
    n<1
    时,此代码也会在
    n==1时报告“最大素数为:1”。