问题描述
我想计算一个整数的每个素因数的数量,然后打印最高的计数。例如720 = 2^4 * 3^2 * 5^1。所以我想打印最大时间出现次数 = 4 并且数字是 2。我尝试使用 Integer.max()
,但这没有用。
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
int num;
Scanner in = new Scanner(system.in);
System.out.print("Enter a number: ");
num = in.nextInt();
TreeMap<Integer,Integer> factors = new TreeMap<>();
for (int i =2; i < num; i++){
int count = 0;
while (num%i == 0){
System.out.println(i + " ");
num = num/i;
count ++;
}
if (count > 0){
factors.put(i,count);
}
}
if (num > 2){
System.out.println(num + " ");
factors.put(num,1);
}
System.out.println( "-------------" );
for( Integer factor : factors.keySet() ){
System.out.println( factor + "^" + factors.get( factor ) );
}
}
}
解决方法
如果您只想要出现最多的素数,那么您可以在每个素数经过测试后进行检查。为此,地图并不是真正必要的。请注意,多个素数可能出现相同的次数。如果有平局,这只会保存遇到的第一个。
int num;
Scanner in = new Scanner(System.in);
System.out.print("Enter a number: ");
num = in.nextInt();
int primeFactor = 0;
int count = 0;
int maxCount = 0;
int inc = 1; // initial increment.
int i = 2; // intitial prime
while (num > 1) {
count = 0;
while (num%i == 0) {
num = num/i;
count++;
}
// here check current count against maxCount and
// alter if required.
if (count > maxCount) {
maxCount = count;
primeFactor = i;
}
if (count > 0) {
System.out.printf("Prime = %d,count = %d%n",i,count);
}
i+=inc; // bump by 1 to get 3 and then
inc = 2; // start incrementing by 2
}
// and print the results.
System.out.println("First highest occuring prime = " + primeFactor);
System.out.println("MaxCount = " + maxCount);