kangsy763   4년 전

미쳐부리겠습니다.. %c 를 죄다 박아서 오버플로우 때문에 틀렸습니다는 안 나오는 것 같은데.. 무엇이 문제인걸까요

lim551   4년 전

10^9 * 10^9는 몇일까요?

scvhero   4년 전

정말 넘어가지 않나요?

kangsy763   4년 전

@lim551

10^18 이요..?

넣으면 10^9*10^9 되구 이것들이 각각 10*10^8 로 나뉘어지고 이것들이 다시 ^4 ^2 ^1 나뉘어지고 되는 것 아닌가요 ? ?

kangsy763   4년 전

@scvhero 이 부분 다시 보고오겠습니다..

lim551   4년 전

아까 전까지 int 아니었나요..

kangsy763   4년 전

@lim551 아... 맞아여.. 그 부분 다시 long long 으로 바꿧어요 죄송해용 ㅜㅜ 근데도 오답 윽!

kangsy763   4년 전

@scvhero

result = (dq(a, b / 2, c)%c)*(dq(a, b / 2, c)%c)%c;

이 부분 2147483646 * 2147483646  을 모듈러 하여도 저거 그대로 어쩔 수 없이 곱하게 되는데.. 이건 %c를 막 붙인다고 되는게 아니네요 ㅠㅠ 

이 떄에는 대체 어떻게 처리해줘야 하는거죠..?

scvhero   4년 전

일단 또 반례 드립니다

kangsy763   4년 전

@scvhero 

if (b == 1) return a%c;

이 부분에 %c를 안달았네요. 이 부분 수정을 통해 이해할 수 있는데 

2147483646 이 경우는

2147483646 3 2147483647 

>>

result=  (2147483646%3 * dq( 2147483646, 2,  2147483647)%3)%3 이 되고,

dq( 2147483646,2, 2147483647)는 b가 1이 되어서, return  2147483646% 2147483647 >>  2147483646 이 나와서

결국

dq( 2147483646, 2,  2147483647) 는 2147483646 *  2147483646 이 나와서 오버플로우가 나와야 되는 것 아닌가요.. ?

kangsy763   4년 전

아 long이 아니라 long long 이어서 안나겠꾸나...흐...감사합니다..

kangsy763   4년 전

그런데 long long을 쓰는건 왠지 이 문제가 내주는 방법이 아닌 좀 꼼수 같은 느낌이 드는데, 

long과 int로 해결하기 위해서는 어떤식으로 접근해야 할까요? 

scvhero   4년 전

진짜 그런 의도의 문제는 범위도 더 크게 주고 제출 언어에도 제한을 겁니다

kangsy763   4년 전

그렇군요! 감사합니다 

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