[ EX) 10 제곱근 3.xxxxx ]정수 3이 될때까지 2부터 차근차근 나누어 주는 것이다.
// 3.XXX이니까 2~3까지 나누어질 것이다.
//다만 2로 나누어 졌을때 나머지가 0 이 됨으로
// 반복문은 탈출하게 된다. 3까지 갈 필요 없다.
그후 나머지가 0이 되는 값이 소인수가 된다.
다음 소인수를 구하기 위해
//몫이 되는 값은 5이다.
나머지 외 몫이 되는 수를 다시 제곱근 후
위와 같은 방식으로 진행하며,
자기 자신이 나누어지는 수와 같아질때까지 반복한다.
Scanner scan = new Scanner(System.in);
int number, d, SqrtE;
int [] arr = new int [100];
int mok = 0, nmg = 0;
int count = -1;
//배열 위치 지정 함수
number = scan.nextInt();
while(true) {
d = 2;
//제곱근 까지 하나씩 더해줄 수
//1은 곱해도 1이기 때문에
//제외 시키고 시작점은 2부터 시작
SqrtE = (int) Math.sqrt(number);
//정수 까지만 체크하면 되기 때문에
//int 형은로 변환을 해줌
while(true) {
if(d > SqrtE) {
d = number;
break;
//더 이상 d로 나누어 지는 값이 없어
//d가 SqrtE 보다 커진 경우
//number 자체가 소인수 이기 때문에
//d 값에 number 대입
}
mok = number / d;
nmg = number - mok * d;
if(nmg == 0) {
break;
//나머지가 0이 되는 수도
//소인수 이기 때문에 배열 탈출
}else {
d++;
}
}
count++;
arr[count] = d;
if(number == d) {
break;
}
//number 와 d 값이 같은 경우
//더 이상의 소인수는 없음
//때문에 반복문 중단
number = mok;
//넘버를 몫값으로 초기화 해주고
//다음 소인수 체크
}
for(int i = 0; i <=count; i++) {
System.out.println(arr[i]);
}