helios789789   3년 전

이문제는 소수의 이진수 표현 방법과 밀접한 관련이 있습니다.

소수의 이진수 표현 방법을 모르신다면 검색해보시길 추천드립니다.

60자리 이하의 패턴으로 매칭하지 못하는 경우는 주어진 분수를 이진수로 변환했을때

소숫점 120자리 이하의 소수로 딱 맞아 떨어지거나, 소수점 120자리 이상이지만 유한소수인 경우 입니다.

밑의 코드에서 주어진 분수가 유한소수인지, 120자리 이하에서 딱 맞아 떨어지는지를 확인하는것을 볼 수 있습니다.

120자리 이상의 무한 소수라면, 이제 패턴매칭을 해주면 됩니다.

맨 처음에는 등비수열의 합 으로 접근하였는데, b 의 범위가 long long 의 max 값인 2^63 - 1 까지 이므로 소숫점 아래 60자리의 소수인 경우 등비수열의 합을 계산하는데 오버플로우가 나서 다른 방법으로 접근하였습니다.

a / b 꼴 을 소수로 바로 변경하면 부동소숫점 오차가 발생할 수 있어, 계속 분수의 형태를 유지하면서 계산하는 방법에 유의하시길 바랍니다.

1 / 2 와 컴퓨터가 표현하는 0.5 는 오차가 발생할 수 있습니다.

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