자바 과제 질문드립니다 (소인수분해)

자바 과제 질문드립니다 (소인수분해)

작성일 2024.04.10댓글 1건
    게시물 수정 , 삭제는 로그인 필요

/**

* 자연수를 소인수분해하여 인수들을 문자열로 반환한다.

* @param n 주어진 자연수.

* @return 소인수분해 결과 문자열.

*/

public static String factor(long n) {

String factors = "";

for (int i = 2; i * i <= n; i++) {

while (n % i == 0) {

n /= i;

factors += i + " ";

if (n % i != 0) {

break;

}

}

}

if (n != 1)

factors += n;

return factors;

}


우선 제가 작성한 코드입니다.

비교적 크지 않은 수들은 바로바로 계산을 해주는데

6,066,666,686과 같이 2 이외의 소인수가 큰 수(3,003,333,343)인 수들은 시간이 오래 걸리는지 계산이 되질 않습니다..

프로그램을 좀 더 효율적으로 만들 수 있는 방법이 있을까요?

코딩 초보라 모르는 것이 많습니다..제가 작성한 코드를 크게 변형시키지 않는 선에서 ㅊ조언 부탁드립니다..!!



#자바 과제 #자바 과제 제출 #자바 과제 진행하기

profile_image 익명 작성일 -

아래 코드를 한 번 실행시켜 보세요.

System.out.println(Long.MAX_VALUE);

java 에서 long 형이 나타낼 수 있는 최대값을 출력해 줍니다.

System.out.println(6066666686L * 6066666686L);

이것을 출력해 보면 음수가 나오는 것을 알 수 있습니다. 무슨 말인가 하면 이 계산값이 long 형이

표현할 수 있는 최대값을 넘었기 때문에 overflow가 발생한 것입니다.

여기까지 참조하시고 이제 문제점을 찾아 봅시다.

for (int i = 2; i * i <= n; i++) {

코드 중에 i * i 를 계산하는 것이 있는데 n 은 long 인데 i 가 int 형이므로 어느 순간 i 의 값이 int 형의 최대값을 넘을 수가 있습니다. int i 를 long i 로 바꾸어줄 필요가 있습니다.

그리고,

while (n % i == 0) { n /= i; factors += i + " "; if (n % i != 0) { break; } }

이 코드에서 아래 부분은 필요가 없습니다. while (n % i == 0) 와 중복됩니다. (뭐, 중요한 문제는 아닙니다.)

아래와 같이 코드를 바꾸어 보세요.

/** * * 자연수를 소인수분해하여 인수들을 문자열로 반환한다. * * @param n 주어진 자연수. * * @return 소인수분해 결과 문자열. * */ public static String factor(long n) { String factors = ""; for (long i = 2; i * i <= n; i++) { while (n % i == 0) { n /= i; factors += i + " "; } } if (n != 1) factors += n; return factors; }

블록체인 질문

... 대해 질문이 있습니다. 대학교 글쓰기 과제로 블록체인에 대해... 첨부 드립니다. 3. 양자컴퓨터가 상용화되면 블록체인은 해킹당할 가능성이 있나요? 소인수분해같은 공개키...

중1 수학 문제

... 분해 복습하고 있는데 무슨 소린지 헷갈려서요.. 좀 알려주세요 안녕하세요 네이버 과제 전문가, 과제헬퍼입니다. 질문 주신 내용을 꼼꼼히 읽고 답변 드립니다....

영재수학문제

영재학급과제인데 부탁드립니다.. 가능하시다면 풀이도... a*b*c=2450=2*5*5*7*7로 소인수분해 했습니다. [3] a+b+c=2x인데 a,b,c의 값을 알겠는가? 라는 교수의 질문에...

컴퓨터를 배워보려고 합니다

... 본체 분해 및 조립정도는 할줄 알고요.. 수학은 중3기준 잘하는... 부탁드립니다 [ 컴퓨터를 배워보려고 합니다. ] IT국비지원취업센터장입니다. 질문에 답변드리도록...

20살 수능 편입

... 여기 친구들은 소인수분해도 못합니다. 어떤 계기로 인해 진짜 이렇게 살다간 인생 답 없을거 같아서 질문합니다... 남겨드립니다. 수능을 다시 보는것 보다는 편입을...