如何以特定格式打印素数

时间:2019-05-31 03:49:08

标签: java

我必须要求用户输入数字,并打印出主要因子。

但是,这与其他素因代码不同,因为我需要以特定格式打印它。

如果用户输入27,我必须打印出

3 ^ 3

如果使用输入28,我必须打印出

2 ^ 2 * 7

我知道如何仅打印出主要因素,因此,如果用户输入27,它将打印出

3 3 3

但是,我很难理解如何输入^符号和*符号。我认为我必须计数相同的数字并创建一个if循环(可能),但是我不知道如何执行此操作。

import java.util.*;

public class Prime{
   public static void main(String[] args) {
      Scanner input= new Scanner (System.in);

      System.out.println("Enter a number");
      int num= input.nextInt();
      String prim = "";

      for (int i = 2; i <= num ; i++) {
         while (num % i == 0) {
            prim += i + " ";
            num /= i;
         }
      }  


      System.out.println("Prime factors are: " + prim);

   }

}

上面的代码仅打印出因素,我现在要做的是使用^和*更改格式。

有人可以帮我吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

此处标识了数字的代码频率,该频率是j变量,并且i表示比检查频率为1且大于1并正确附加其格式以具有格式的值必填。

 public static void main(String[] args) {
                 Scanner input= new Scanner (System.in);
                  String result="";
                  System.out.println("Enter a number");
                   int num= input.nextInt();
                  String prim = "";

                  for (int i = 2; i <= num ; i++) {
                      int j=0;
                     while (num % i == 0) {
                        j++;
                        prim += i;
                        num /= i;
                     }
                   if(j>0){
                 if(j>1){
                   result=result+i+"^"+j+"*";
                 }else{
                     result=result+i+"*";
                 }
                }
                  }  


                  System.out.println("Prime factors are: " +result.substring(0,result.length()-1));

               }

答案 1 :(得分:0)

最简单的方法可能是跟踪所有素数因子,计算每个素数的重复数,然后为每个素数打印^之后的重复数。

使用面向对象设计,您可以创建自己的类,其中包含有关因子及其重复的信息。然后,当您发现新的因子而不是附加字符串时,您可以更新与该因子相对应的现有对象中的计数器,或者在计数器设置为1的情况下创建一个新的计数器。然后遍历此集合并为每个对象打印^和*在对象之间。

编辑:经过一番思考,您可以按数字重复除法并计算可以执行多少次。这是循环:

    for (int i = 2; i <= num ; i++) {
        int counter = 0;
        while (num % i == 0) {
            counter ++;
            num /= i;
        }
        if( counter > 0) {
            if( !firstFactor ) {
                prim += "*";
            }
            firstFactor = false;
            prim += i;
            if( counter > 1) {
                prim += "^" + counter;
            }
        }
    }

答案 2 :(得分:0)

使用HashSet在列表中查找唯一成员,并使用Collections.frequency()计算元素在列表中的出现频率。那你基本上就在那里。

import java.util.*;

public class Prime{
   public static void main(String[] args) {
      Scanner input= new Scanner (System.in);

      System.out.println("Enter a number");
      int num= input.nextInt();
      String prim = "";
      ArrayList<Integer> l = new ArrayList<Integer>();

      for (int i = 2; i <= num ; i++) {
         while (num % i == 0) {
            l.add(i);
            num /= i;
         }
      }  

      Set<Integer> s = new HashSet<>(l);
      for (int i : s){
          if (prim.length() > 0){
              prim += " * ";
          }
          int power = Collections.frequency(l, i);
          prim += i;
          if (power > 1){
              prim += "^" + power;
          }
      }

      System.out.println("Prime factors as list: " + l);
      System.out.println("Prime factors as formula: " + prim);
   }

}

28的输出:

Prime factors as list: [2, 2, 7]
Prime factors as formula: 2^2 * 7