.NET 개발에서는 때로는 통계, 금융, 천문학 및 기타 계산과 같은 일부 주변 주제의 지식 내용으로 인해 .net에서 가장 큰 숫자 유형이 저장되더라도 암호화 및 암호 해독 알고리즘에 많은 수의 작업이 포함됩니다. 내 생각 중 하나는 계산할 때 숫자 유형을 사용하고 (일시적으로) 문자열로 출력하는 것입니다. 그런 다음 저장할 때 작은 단계의 결과를 임시로 저장하기 위해 BOX[n] n 배열이 필요합니다. 계산.
'예를 들어
=================== 알고리즘 이해도 ========================
'97*97*97*97*97 = 8587340257 상자(1) = 587340257 상자(2)=8
'97*97*97*97*97*97 = 832972004929 상자(1) = 972004929 상자(2)=832
'97*97*97*97*97*97*97 = 80798284478113 상자(1) = 284478113 상자(2)=80798
'97*97*97*97*97*97*97*97 = 7837433594376961 상자(1) = 594376961 상자(2)=7837433
'97^ 9 = 760231058654565217 상자(1) = 654565217 상자(2)=760231058
'97^ 10 = 73742412689492826049 상자(1) = 492826049 상자(2)=742412689 상자(3)=73
… … … … …
아래 표의 상자가 클수록 해당 숫자가 높아집니다. 위 알고리즘을 사용할 때 ① 먼저 BOX의 자릿수를 정의해야 합니다. 예를 들어 위의 숫자는 9자리입니다(필요 및 실제에 따라 다름). 정황),
②계산 습관으로 인해 많은 사람들은 맨 아래 위치 {box(0 -> n)}에서 셀 때 상자(n+1) 자리 수를 먼저 계산한 다음 box(n)에서 생성된 캐리 번호를 추가합니다(예: 위의 덧셈 처리 등의 처리를 위해 먼저 박스(1)부터 박스(2)=0까지 계산하여 8개의 캐리수를 생성하는 박스(2)+캐리수=8) ③ 높은 것부터 시작하는 것이 가장 좋다 위치를 지정하면 많은 수고를 덜 수 있습니다. 상자 수는 중요하지 않습니다. 가득 차면(가장 높은 아래 첨자 상자에 의해 생성된 캐리 수) 다른 하나를 추가합니다. 모듈러스 연산이 있습니다. 모듈러스가 크지 않으면 위의 아이디어를 사용하여 모듈러스를 조각으로 계산한 다음 연결할 수도 있습니다. 상자는 임시 결과이며 상자는 재배포됩니다(다음에서 다시 잘라야 함). 예를 들어 모듈로 123456789123456789인 경우 8자리 상자를 설정합니다. box(1)=89 box(2)=91234567 box(3)=12345678. 는 123456789123456789 ¼ 333=370741108478849 모듈러스는 72) 그러면 재배포된 상자는 box(1) =478849 box(2) =370741180이어야 하지만 box(1) =370741180 box(2) = 478849는 아니어야 합니다. ∵ 모듈러스를 시작하세요. 출신 box(n)이 한 번 모듈로된 후 변경되지 않으면 모듈러스를 다시 취한 결과는 변경되지 않으며 결과는 box(n) = box(n)입니다.
큰 수의 연산과 관련된 또 다른 상황은 A의 n승 모듈로를 취하는 것입니다(A ^n mod V). mod 수가 크지 않으면 수행할 수 있습니다(n A mod 후에 끝납니다). V)* A mod V) * A mod V... 이 알고리즘은 반드시 재귀적으로 구현될 필요는 없으며 최대 2개 수준의 중첩 루프와 함께 간단한 루프를 사용할 수 있습니다.
최종 조언: 큰 수를 더하거나 빼거나 곱하거나 나눌 때 피제수(덧셈/뺄셈/곱셈/나눗셈)를 쉽게 인수분해하지 마세요. 이 알고리즘은 매우 비효율적입니다.
(급하게 쓴 글이라 오타가 있을 수 있으니 양해 부탁드립니다)
출처 : 같은 BLOG