숫자의 곱셈 역함수를 계산하는 알고리즘을 연구 중입니다. 나는 이것을하기 위해 기능을 만들어야 만했다. 그러나, 나는 최적화에 붙어있다.확장 유클리드 알고리즘 솔루션
내 알고리즘이 작동하지만 비교적 적은 수입니다.
숫자가 (a,b,n)
인 경우, a/b (mod n)
을 반환해야합니다.
이 부분은 할 수 있습니다. n
정말 큰 경우 내가 이런 식으로 해결하고 있기 때문에, 내 코드는 엄청나게 느려지이와
for i in range(1,n):
if b*i%n == a%n:
return i
내 문제가 다시 n
의 크기입니다. 거대 해지면 코드가 실행되지 않습니다.
이제 내 번호가 3,2,7
이라고 가정하고 모든 번호를 확인하지 않고 대답 5
을 얻어야합니다. 그래서 확장 된 유클리드 알고리즘을 사용해 보았습니다.
3x + 7q = 1
: 내 숫자로 요약하면
ax - qn = 1
, 내가 끝낼 :
ax + by = 1
ax = 1 (mod n) => ax - 1 = qn, where q is an integer
내가 식으로 끝날 :
이
내가 무슨 짓을 이 문제를 어떻게 해결할 수 있습니까? 더 좋은 방법이 있습니까? 당신이 해결하려고하는 어떤
원본 메소드가 실패하게 만드는'n' (그리고'a'와'b')의 대략적인 값은 무엇입니까? – senshin
어제이 질문을했을 때 확장 된 유클리드 알고리즘을 찾아 보라고했습니다. 당신은 분명히 그렇게하지 못했습니다. 페이지 상단의 검색 창에 "확장 유클리드 알고리즘"이라는 구를 입력하십시오. 몇 가지 관련 답변을 찾을 수 있습니다. 내 것도 포함 해서요. 아마도 모든 페이지에 대한 모든 솔루션에 업보트를 제공해야하며 작업에 감사해야합니다. 나는이 질문을 끝내기 위해 투표를하고 있습니다. 찾은 솔루션 중 하나를 구현하는 데 문제가있는 경우 다시 돌아와 특정 질문을하십시오. – user448810
@ user448810 나는 진클리드 알고리즘 (euclidian algorithm)을 실제로 찾았는데, 이것이 내가이 질문을하게 만들었다. 나는이 사이트를 처음 사용하기 때문에 여기서 검색하는 것을 생각하지 않고 오히려 외부 소스를 사용했다. –