jsh587   1년 전

채점번호;

17027385 (https://www.acmicpc.net/source...)

1.

제 소스코드를 보면 L = 1 아래에 있는 while 문은 입력된 두 수중 작은 수의 약수리스트를 만드는 코드인데,

코드중 a.count는 d.count로 바뀌어야 합니다. (a는 소수 리스트, d는 작은수의 약수리스트)

소수의 거듭제곱들로 나누어서 나누어떨어지면 d의 리스트에 중복되는 데이터가 있는지 확인하고, 없다면 추가하는 알고리즘인데, d에서 카운트 해야할것을 a에서 카운트 했기때문에, 입력되는 작은수의 약수리스트가 제대로 작성되지 않습니다.

예를 들면 25 와 35를 입력했을때 

25의 약수리스트 d = [1,1,25,25] 가 되어버려 35와의 최대공약수가 1이 되어버립니다.

2. 두번째로 합성수의 n제곱에 대한 약수를 제대로 찾지못해 생기는 오류입니다. (위 1을 고쳐도 여전히 남아있는 문제)

36과 42를 입력하면 36의 약수리스트 d = [1, 2, 3, 4, 9, 12, 18, 36]으로, 42와의 최대공약수가 3이 되어버립니다.

이 문제는 현재 12000명이 정답처리되어있고, 또한 단계별로 풀어보기 '수학 3' 에도 등록되어 있는 문제입니다. 조속한 수정 부탁드립니다.

jh05013   1년 전

데이터 추가와는 별개로, 이 문제 입력 범위가 너무 작아서 브루트 포스로 풀리네요. 삭제하겠습니다.

jh05013   1년 전

물론 데이터를 추가해야 하는 것은 맞습니다.

startlink   1년 전

재채점했습니다.

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