[英]How to find prime numbers between two intervals? I made one but this doesn't work
C 编程初学者在这里。 我有一个作业,我必须在两个间隔之间找到素数。 这是我的代码:
#include <stdio.h>
int main() {
// This is a program to calculate the prime number between two numbers
printf("Enter two numbers!:");
int a, b, i, j, num1, num2;
scanf("%d%d", &a, &b);
if (a < b) {
for (num1 = (a + 1); num1 < b; num1++) {
for (i = 2; i < num1; i++) {
if ((num1 % i) == 0)
break;
else
continue;
}
if ((num1 % i) == 0)
continue;
else {
printf("%d between %d and %d is a prime number!\n", num1, a, b);
continue;
}
}
} else if (b < a) {
for (num2 = (b + 1); num2 < a; num2++) {
for (j = 2; j < num2; j++) {
if ((num2 % j) == 0)
break;
else
continue;
}
if ((num2 % j) == 0)
continue;
else {
printf("%d between %d and %d is a prime number!\n", num2, b, a);
continue;
}
}
}
return 0;
}
这会产生 output:
Enter two numbers!:20
30
这有什么问题? 我已经这样做了很多天了。 我也尝试使用 goto 语句但没有任何进展。 也许我一直做错了。 在这方面可以做什么?
每个数字都可以被自身整除(没有余数)。 因此,当您的内部for
循环(例如for (i = 2; i < num1; i++) {...
)在没有中断的情况下得出结论时,循环索引(在本例中为i
)将等于num1
... 因为那是你告诉循环停止的时候。 因此,在下面的if ((num1 % i) == 0)
中, num1
和i
将相同,给出零余数并跳过找到的素数的显示。
要解决此问题,只需首先测试i
和num1
是否相同(代码第二部分中的j
和num2
也类似)。
此外,你的两个else... continue
这两个内部循环中的“块”是完全多余的,因为循环的主体中没有其他东西可以“跳过”。
试试这个:
int main()
{
//This is a program to calculate the prime number between two numbers
printf("Enter two numbers!:");
int a, b, i, j, num1, num2;
scanf("%d%d", &a, &b);
if (a < b) {
for (num1 = (a + 1); num1 < b; num1++) {
for (i = 2; i < num1; i++) {
if ((num1 % i) == 0)
break;
}
if (i != num1 && (num1 % i) == 0) // If i == num1, then we've found a prime number!
continue;
else {
printf("%d between %d and %d is a prime number!\n", num1, a, b);
continue;
}
}
}
else if (b < a) {
for (num2 = (b + 1); num2 < a; num2++) {
for (j = 2; j < num2; j++) {
if ((num2 % j) == 0)
break;
}
if (j != num2 && (num2 % j) == 0)
continue;
else {
printf("%d between %d and %d is a prime number!\n", num2, b, a);
continue;
}
}
}
return 0;
}
随时要求任何进一步的澄清和/或解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.