2 개의 숫자 곱셈에 대해 가능한 가장 빠른 알고리즘을 작성하고 싶습니다. 각 숫자는 최대 1000000 자릿수이며 문자열에 포함되어 있습니다.문자열 (숫자 1000000 자리)에서 숫자 곱셈을 구현하는 가장 빠른 방법
누구나이 문제에 대해 이야기하고 싶습니까? 나는 정말로 속도 솔루션을 찾고있다.
2 개의 숫자 곱셈에 대해 가능한 가장 빠른 알고리즘을 작성하고 싶습니다. 각 숫자는 최대 1000000 자릿수이며 문자열에 포함되어 있습니다.문자열 (숫자 1000000 자리)에서 숫자 곱셈을 구현하는 가장 빠른 방법
누구나이 문제에 대해 이야기하고 싶습니까? 나는 정말로 속도 솔루션을 찾고있다.
문자열을 숫자의 이진 표현으로 변환해야합니다. 그 후 내가 아는 가장 빠른 곱셈 알고리즘 중 하나는 Karatsuba's입니다.
위키피디아의 기사에 따르면 Strassen의 알고리즘은 Karatsuba가 10k에서 40k 자리까지의 숫자에서 시작하는 것보다 뛰어나다. – michalburger1
그냥 파블로의 대답을 확장하려면 각 숫자가 10 진수 1000008 자릿수 인 것으로 가정합니다. 111112 9 자리 10 진수로 변환 할 수 있으며 각각 UInt32에 저장됩니다. 귀하의 곱셈 알고리즘을 수행하십시오. (두 개의 UInt32 섹션을 곱한 결과를 유지하려면 UInt64를 사용해야하므로 64 비트 시스템이 필요할 수 있습니다.) 그러면 기본 10을 기준으로 9^2 또는 9^log2 (3)의 속도가 향상됩니다 , 알고리즘에 따라 다릅니다.
결과를 문자열로 나타내려면 답변을 저장하는 데 최대 1TB의 저장 공간이 필요하지 않습니까? – philcolbourn
@philcolbourn 제품에는 2 백만 자릿수 만 있습니다.). – michalburger1
@Paul 숫자에 A와 B 숫자를 곱하면 제품에 A * B 숫자가 아닌 A + B 숫자가 표시됩니다. 예를 들어, 1e10 * 1e10 = 1e20이 아닌 1e100을 곱하면됩니다. – michalburger1