繁体   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