Java 项目Euler-3素因子除法中的if vs while循环

Java 项目Euler-3素因子除法中的if vs while循环,java,if-statement,while-loop,primes,prime-factoring,Java,If Statement,While Loop,Primes,Prime Factoring,今天我用投影仪练习我的编码测试。在进行主要因素划分时,我偶然发现了一些奇怪的东西。以下是相关代码(res是一个数组列表): 区别在于: 如果使用If,则每个数字只测试一次。因此,如果你能拔出2,你只能尝试一次。下一个数字是4,虽然它不是素数。 这同样适用于5个国家。25 如果在期间使用,则测试每个数字,直到知道它不再在要测试的数字中 区别在于: 如果使用If,则每个数字只测试一次。因此,如果你能拔出2,你只能尝试一次。下一个数字是4,虽然它不是素数。 这同样适用于5个国家。二十五, 如果在期

今天我用投影仪练习我的编码测试。在进行主要因素划分时,我偶然发现了一些奇怪的东西。以下是相关代码(
res
是一个数组列表):

区别在于:

  • 如果使用
    If
    ,则每个数字只测试一次。因此,如果你能拔出2,你只能尝试一次。下一个数字是4,虽然它不是素数。 这同样适用于5个国家。25
  • 如果在期间使用
    ,则测试每个数字,直到知道它不再在要测试的数字中
区别在于:

  • 如果使用
    If
    ,则每个数字只测试一次。因此,如果你能拔出2,你只能尝试一次。下一个数字是4,虽然它不是素数。 这同样适用于5个国家。二十五,
  • 如果在期间使用
    ,则测试每个数字,直到知道它不再在要测试的数字中

    • 您也可以将其更改为

      for (int x = 2 ; x <= n/x ; ) {       
              if (n % x == 0) {
                  System.out.println("Prime factor: " + x);
                  res.add(x);
                  n = n / x;
              }       
              else {
                  x++;         // increment moved here
              }
          }
      if (n > 1) {
          System.out.println("Prime factor: " + n);
          res.add(n);
      }
      
      for(int x=2;x 1){
      System.out.println(“素因子:+n”);
      决议增补(n);
      }
      

      我还更改了终止条件,以使其在
      n
      的最大素因子本身较大的情况下更有效,因为如果
      n=a*b
      a也可以将其更改为

      for (int x = 2 ; x <= n/x ; ) {       
              if (n % x == 0) {
                  System.out.println("Prime factor: " + x);
                  res.add(x);
                  n = n / x;
              }       
              else {
                  x++;         // increment moved here
              }
          }
      if (n > 1) {
          System.out.println("Prime factor: " + n);
          res.add(n);
      }
      
      for(int x=2;x 1){
      System.out.println(“素因子:+n”);
      决议增补(n);
      }
      

      我还更改了终止条件,以使其在
      n
      的最大素因子本身较大的情况下更有效,因为如果
      n=a*b
      a,您是否也可以发布while循环版本?
      while
      是执行一些代码,直到某些条件变为false(因此它循环),
      如果
      是某个条件为真时执行一些代码(所以一次)你也可以发布你的while循环版本吗?
      是执行一些代码直到某个条件为假时(所以它循环),
      如果
      是某个条件为真时执行一些代码(所以一次)谢谢,猜这解释了为什么if语句使用递归。谢谢,我猜这就解释了为什么if语句是使用递归的。谢谢你的提示!谢谢你的提示!
      for (int x = 2 ; x <= n/x ; ) {       
              if (n % x == 0) {
                  System.out.println("Prime factor: " + x);
                  res.add(x);
                  n = n / x;
              }       
              else {
                  x++;         // increment moved here
              }
          }
      if (n > 1) {
          System.out.println("Prime factor: " + n);
          res.add(n);
      }