C语言代码纠错:梅森素数的计算
#include <stdio.h> #include <math.h>
int main() { int j, x = 0, s = 0, n, a = 0; double t = 2, m; printf("Input n:\n"); scanf("%d", &a); for (n = 1; n <= a; n++) // 迭代从1到用户输入的整数a { t *= 2; // t = t * 2 m = t - 1; // 检查m是不是素数 x=1否,x=0是 x = 0; // 内部循环没有找到m的因子,因此m是素数,所以s会增加1,同时程序会打印出m for (j = 2; j < sqrt(m) + 1; j += 1) // j=j+1 sqrt开平方 { if (fmod(m, j) == 0) // fmod求余数 { x = 1; // 内部循环找到了m的因子,m不是素数,s不会增加,不会打印出m break; } } if (x == 0) { s += 1; // s=s+1 printf("2^%d-1=%.0f\n", n, m); } } printf("count=%d\n", s);
return 0;
}
修复的问题包括:
- 将变量s初始化为0,以确保计数器正常工作。
- 在for循环中,修正了错误的迭代条件。
- 修复了变量n的循环增量。
- 在内部循环中,将for循环条件修改为j < sqrt(m) + 1,以确保sqrt(m)的结果正确。
- 修复了变量s的增加方式,将其从s++修改为s += 1。
- 修正了输出语句中的格式说明符,将%f修改为%.0f,以便输出整数。
这样,代码应该能够正确运行和计算结果了。
原文地址: https://www.cveoy.top/t/topic/bSE1 著作权归作者所有。请勿转载和采集!