1341번 - 사이좋은 형제
이문제는 소수의 이진수 표현 방법과 밀접한 관련이 있습니다.
소수의 이진수 표현 방법을 모르신다면 검색해보시길 추천드립니다.
60자리 이하의 패턴으로 매칭하지 못하는 경우는 주어진 분수를 이진수로 변환했을때
소숫점 120자리 이하의 소수로 딱 맞아 떨어지거나, 소수점 120자리 이상이지만 유한소수인 경우 입니다.
밑의 코드에서 주어진 분수가 유한소수인지, 120자리 이하에서 딱 맞아 떨어지는지를 확인하는것을 볼 수 있습니다.
120자리 이상의 무한 소수라면, 이제 패턴매칭을 해주면 됩니다.
맨 처음에는 등비수열의 합 으로 접근하였는데, b 의 범위가 long long 의 max 값인 2^63 - 1 까지 이므로 소숫점 아래 60자리의 소수인 경우 등비수열의 합을 계산하는데 오버플로우가 나서 다른 방법으로 접근하였습니다.
a / b 꼴 을 소수로 바로 변경하면 부동소숫점 오차가 발생할 수 있어, 계속 분수의 형태를 유지하면서 계산하는 방법에 유의하시길 바랍니다.
1 / 2 와 컴퓨터가 표현하는 0.5 는 오차가 발생할 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
helios789789 3년 전 3
이문제는 소수의 이진수 표현 방법과 밀접한 관련이 있습니다.
소수의 이진수 표현 방법을 모르신다면 검색해보시길 추천드립니다.
60자리 이하의 패턴으로 매칭하지 못하는 경우는 주어진 분수를 이진수로 변환했을때
소숫점 120자리 이하의 소수로 딱 맞아 떨어지거나, 소수점 120자리 이상이지만 유한소수인 경우 입니다.
밑의 코드에서 주어진 분수가 유한소수인지, 120자리 이하에서 딱 맞아 떨어지는지를 확인하는것을 볼 수 있습니다.
120자리 이상의 무한 소수라면, 이제 패턴매칭을 해주면 됩니다.
맨 처음에는 등비수열의 합 으로 접근하였는데, b 의 범위가 long long 의 max 값인 2^63 - 1 까지 이므로 소숫점 아래 60자리의 소수인 경우 등비수열의 합을 계산하는데 오버플로우가 나서 다른 방법으로 접근하였습니다.
a / b 꼴 을 소수로 바로 변경하면 부동소숫점 오차가 발생할 수 있어, 계속 분수의 형태를 유지하면서 계산하는 방법에 유의하시길 바랍니다.
1 / 2 와 컴퓨터가 표현하는 0.5 는 오차가 발생할 수 있습니다.