簡體   English   中英

如何找到兩個區間之間的素數? 我做了一個,但這不起作用

[英]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)中, num1i將相同,給出零余數並跳過找到的素數的顯示。

要解決此問題,只需首先測試inum1是否相同(代碼第二部分中的jnum2也類似)。

此外,你的兩個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM