[英]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.