java While循环1 - 100之间的质数

pkbketx9  于 2023-01-29  发布在  Java
关注(0)|答案(7)|浏览(145)

我对编程还是个新手,我正在尝试了解循环。我设法让一段代码工作,但我仍然不完全理解它是如何工作的。我在网上找到了一个类似的程序,它是用for循环编写的,我设法让它作为while循环工作(花了我几天时间!!!)。我正在尝试理解内部循环在做什么。
我知道外部循环在每次循环迭代时都要检查x是否小于100。为什么需要在循环中嵌套y变量,为什么它被设置为2,为什么它每次都需要递增1?还有,有没有办法不使用**break就退出循环?* *?
我在这里看到了一些其他的这种类型的程序的例子,但是我希望有人能解释一下这个程序是如何具体工作的。
提前感谢!!!

class PrimeNumbers {
  public static void main(String args[]) {
    int x = 2;
    while (x <= 100) {
      int y = 2;
      while (y <= x) {
        if (x == y) {
          System.out.println(x);
        }
        if (x % y == 0) {
          break;
        }
        y++;
      }
      x++;
    }
  }
}
sf6xfgos

sf6xfgos1#

评论是你的朋友:

class PrimeNumbers {
    public static void main(String args[]) {
        // No point checking below 2 since the definition of a prime is "A prime number (or a prime) is a natural number greater than 1 ..."
        int x = 2;
        // Looking for primes up-to and including 100
        while (x <= 100) {
            // Same argument as above - start checking at 2 and work upwards.
            int y = 2;
            // stop when y > x as obviously y will not divide x
            while (y <= x) {
                // if y reaches x then we have not found any divisors
                if (x == y) {
                    // success! This x is prime.
                    System.out.println(x);
                }
                // if y divides x leaving no remainder then not prime - give up this y loop and select our next x
                if (x % y == 0) {
                    break;
                }
                // Try next y divisor.
                y++;
            }
            // Try next x candidate.
            x++;
        }
    }
}

命名你的变量会更容易

class PrimeNumbers {
    public static void main(String args[]) {
        // No point checking below 2 since the definition of a prime is "A prime number (or a prime) is a natural number greater than 1 ..."
        int candidate = 2;
        // Looking for primes up-to and including 100
        while (candidate <= 100) {
            // Same argument as above - start checking at 2 and work upwards.
            int divisor = 2;
            // stop when divisor > candidate as obviously divisor will not divide candidate
            while (divisor <= candidate) {
                // if divisor reaches candidate then we have not found any divisors (because of the `break` below).
                if (candidate == divisor) {
                    // success! This candidate is prime.
                    System.out.println(candidate);
                }
                // if divisor divides candidate leaving no remainder then not prime - give up this divisor loop and select our next candidate
                if (candidate % divisor == 0) {
                    break;
                }
                // Try next divisor.
                divisor++;
            }
            // Try next candidate.
            candidate++;
        }
    }
}
huwehgph

huwehgph2#

为什么需要在循环中嵌套y变量,为什么将其设置为2,为什么每次都需要递增1?

我们需要重置循环中的变量,因为需要对x的每个值应用测试。x的值是素数的潜在候选项。为什么将其设置为2是因为每个数都可被1整除。

另外,是否有一种方法可以在不使用break的情况下退出循环;?

你可以在第二个while循环中添加另一个条件,一旦你的退出条件被满足,这个标志就可以被设置。

gajydyqb

gajydyqb3#

变量x迭代从2到100的所有数字。在这个循环中,你将处理一些东西来确定x是否是质数。你的代码要做的是迭代从2到x的所有数字,并尝试每个数字是否能整除x。变量y是第二个数字。
例如,当您在x = 4 . y将首先等于2的迭代中时,然后检查x%y==0,这意味着您检查x是否可被y整除。在本例中,它为真。因此x不是质数,因此您退出内部循环(break;语句)。然后x=5,你有y=2 .这不除x.你增加y(y=3)。这也不会除以x。您可以递增y(y=4)。这不会除以x。您可以递增y如果y==x返回真,这意味着你已经遍历了y的所有值,所以x是一个质数,所以你打印x,退出内部循环,递增x(x=6)等等...

h9vpoimq

h9vpoimq4#

正如你所看到的,你的第一个循环是检查x是否小于100,然后你的下一个循环是对所有小于x的数进行除法运算,如果有一个小于x的数并且mod为0,那么它就不是质数,例如我们的x = 5,在第一次迭代y = 2时,5%2 = 1,因为mod不为0,所以你不能进行除法运算,然后y递增1,5%3 = 2mod是2,还是不可整除的,以此类推,你会发现y递增到5,这意味着没有更小的整数,可以除以x,因为x=5是质数,当你不明白是怎么回事时,试着把所有的东西都打印出来。

wnavrhmk

wnavrhmk5#

要知道一个数是否是质数,只有当这个数(x)被他自己或1相除时,余数才是零。
所以在这个代码中,你用每个数字(x)除以1到该数字本身之间的所有数字(y)。
这就是为什么
if (x % y == 0) { break; }
这意味着,如果除以y,在1和X之间有一个rest = 0,你停止循环,因为它不会是素数。
您可以使用变量标志删除断点,但是循环将执行更多的迭代。

zd287kbt

zd287kbt6#

print('1到100之间的质数是:')
对于范围(2,101)中的数值:如果num〉1:对于范围(2,num)中的i:如果(编号% i)== 0:中断其他:打印(数字)

acruukt9

acruukt97#

class Example{
    public static void main(String[] args) {
        int i=2;
        int j;
        int count;

        while(i<100){
            j=1;
            count=0;
            while(j<=i){
                if (i%j==0){
                    count++;
                }
                j++;
            }
            if (count==2){
            System.out.println(i);
            }
            i++;
        }
    }
}

相关问题