【问题标题】:How do I change this code so it only prints just one copy of each of the prime divisors如何更改此代码,使其仅打印每个主要除数的一份副本
【发布时间】:2020-04-06 08:20:48
【问题描述】:

如何编辑此代码,使其仅打印出每个主要除数的一份副本?

 public class Factors {

    public static void main(String[] args) { 

        // command-line argument
        long n = Long.parseLong(args[0]);

        System.out.print("The prime factorization of " + n + " is: ");

        // for each potential factor
        for (long factor = 2; factor*factor <= n; factor++) {

            // if factor is a factor of n, repeatedly divide it out
            while (n % factor == 0) {
                System.out.print(factor + " "); 
                n = n / factor;
            }
        }

        // if biggest factor occurs only once, n > 1
        if (n > 1) System.out.println(n);
        else       System.out.println();
    }
}

【问题讨论】:

  • 你为什么要这样做?您正在完美地打印出数字的素数分解。

标签: java bluej


【解决方案1】:

或者你用旧因子创建一个数组,或者当你找到一个因子时你继续除法直到余数为零:

for (long factor = 2; factor*factor <= n; factor++) {

    // if factor is a factor of n, repeatedly divide it out
    while (n % factor == 0) {
        System.out.print(factor + " "); 
        long reminder;
        do{ 
            reminder = n % factor;
            if(reminder == 0) n = n / factor; 
        } while (reminder==0 && n>1);
    }
}

【讨论】:

    【解决方案2】:

    在你的主循环中,设置一个boolean 标志来控制打印。

          for (long factor = 2; factor * factor <= n; factor++) {
    
             // if factor is a factor of n, repeatedly divide it out
             boolean flag = true;
             while (n % factor == 0) {
                n = n / factor;
                if (flag) {
                   System.out.print(factor + " ");
                   flag = false;
                }
             }
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2019-08-25
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多