我不知道';我不知道为什么我的C代码总是返回128
我想写一个代码来确定小于n的最大素数。我不知道为什么我的代码总是返回128,不管n是什么输入 这就是我所做的。输入n,然后为i从1到n运行我不知道';我不知道为什么我的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: ");
循环。然后运行嵌套在第一个循环中的另一个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”。