我必须要求用户输入数字,并打印出主要因子。
但是,这与其他素因代码不同,因为我需要以特定格式打印它。
如果用户输入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);
}
}
上面的代码仅打印出因素,我现在要做的是使用^和*更改格式。
有人可以帮我吗?
感谢您的帮助。
答案 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