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

标签 c

我正在尝试编写一个代码来确定小于数字 n 的最大素数。我不确定为什么我的代码总是返回 128,无论输入什么 n。

所以这就是我所做的。输入 n,然后运行 ​​i 从 1 到 n 的 for 循环。然后运行嵌套在第一个循环中的另一个 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;
}

它总是返回 128。

最佳答案

  1. 首先,内部循环应该以 2 开头,而不是 1。即 j=2
  2. 你不应该做largest_prime=i在其他情况下,就像你发现任何数字都不能整除i一样那么它是一个素数,这是错误的。

下面我修改了您的代码以查找小于 n 的最大素数。但这可以通过制作外循环 for(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;
}

关于c - 我不知道为什么我的 C 代码总是返回 128,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57086597/

相关文章:

c - 与 SSE 的并行前缀(累积)总和

c - 函数调用后结构体指针值不会改变

c - 如何告诉 GCC 为实模式生成 16 位代码

c - Linux socket编程中如何限制连接?

c - C中从文件指针获取文件名

在c中比较两个文件;跳过包含特定单词的行

c - 如何在使用介子构建的 C 项目中使用 OpenMP

C:如果参数从右向左压入,为什么会出现下面的情况? (64位操作系统,32位程序)

C 文件更新和创建帮助

c - 整数到带有宏的罗马数字