static boolean[] isPrime;
static ArrayList<Integer> allPrimes = new ArrayList<>();
private static void findAllPrimes() {
for(int i=2;i<=MAX;i++){
if(isPrime[i]){
continue;
}
allPrimes.add(i);
for(int j=i+i;j<=MAX;j+=i){
isPrime[j] = true;
}
}
}
//num 소인수분해하기
HashMap<Integer,Integer> factorization(int num){
HashMap<Integer,Integer> hm = new HashMap<>(); //어떤 소수가 몇 번 쓰였는지를 기록
**for(int prime : allPrimes)**{ //1. 모든 소수들을 돌아가며 소인수분해 한다. (2부터 모든 수 해도 됨)
**while(num % prime == 0){** //2. 나눴을 때 나머지가 0이면 계속 그 prime으로 진행
if(num==1){ //1이면 그만해도 됨
break;
}
**num = num / prime;**
if(hm.containsKey(prime)){ //있으면 +1
hm.put(prime,hm.get(prime)+1);
}
else{ //없으면 생성
hm.put(prime,1);
}
}
}
return hm;
}
"220204"
소요 시간 : 4h