Logo
(追記) (追記ここまで)

아니 슨새임들 out of bounds 가 대체 왜..

11653번 - 소인수분해

알고리즘 초보라 소인수분해 알고리즘을 허접하게 짰다는 거는 맞습니다만..


vs에서는 충분히 잘만 동작하고 동작에 이상이 없을거같은 코드인데 왜 백준에서는


out of bounds를 띄우면서 반려할까요 슨새임들?

sqrt(10^7)가 대략 3200 근처고 이를 근거로 배열의 크기를 넉넉잡아 3500 정도로 설정하신 것 같은데,
sqrt(10^7)가 3200 정도 된다고 해서 [1, 10^7] 범위 내의 모든 수가 3200 이내의 소수로 소인수분해가 가능하다는 것은 아닙니다.

단적인 예로 3500을 초과하는 수 중 소수인 수 중에 3511이 있으며 이를 소인수로 갖는 10^7 미만의 수는 3511 * 2, 3511 * 3, ... 등 많이 존재할 수 있습니다.

이 경우에 대한 처리를 해주시거나 다른 방법을 생각해보셔야 합니다.


감사합니다.

3500을 초과하는 소수는

if (divisor == 2) // n이 소수인 경우
cout << n;


이 코드에서 걸러져서 밑의 while문에 진입하지 않지 않나요?

앗, 답변이 늦었습니다.

7022 = 2 * 3511을 넣으면 3500을 초과하는 소수인 3511을 소인수로 갖지만 7022 자체는 합성수라 문제가 발생할 수 있습니다.

댓글을 작성하려면 로그인해야 합니다.

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /