2904번: 수학은 너무 쉬워

얻어가는 것

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