我正在尝试编写代码以确定小于数字n的最大质数。我不确定为什么无论输入什么,我的代码总是返回128。
这就是我所做的。输入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。
答案 0 :(得分:1)
j=2
largest_prime=i
设为i
,就像您发现任何数字不能除以for(i=n;i>=2;i--)
一样,这是一个错误的素数。以下,我修改了您的代码以查找小于n的最大素数。但这可以通过以下方法进一步改善:制作外部循环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;
}
,并在我们遇到质数时立即中断循环。
multiprocessing.managers.BaseManager