2011-05-16 10 views
3

다음 구현을 기반으로 일부 논리를 수행해야합니다.두 개의 숫자를 나누어서 지수를 찾는 가장 빠른 방법

나는 36 자리까지 큰 숫자를 가지고있다. 913695089923267549815145223638290430 (다른 앱에서 무작위로 생성). 나는 길이가 더 작은 숫자로 그것을 나눌 필요가있다. 70368844197664; (무작위로 다른 응용 프로그램에 의해 생성된다) 19956694.3256

10 진수 (예 : 4)가 나오기 전에 몫의 마지막 숫자 만 사용한다. 목적은 몫이 짝수 또는 홀수인지 그리고 가능한 경우 마지막 자리수도 확인하는 것입니다.

매우 시간이 오래 걸리므로 모듈러스 나 나누기와 같은 간단한 DB 기능을 사용할 수 없습니다. 더 빠른 효율적인 방법이 있습니까? 모든 제안은 매우 감사하겠습니다.

정말 고마워요.

감사 Neeraj는

+2

128 비트의 부호없는 int m과 64 비트의 unsigned int n이 주어지면'(m/n) % 10 '을 계산하려고합니다. 그게 맞습니까? 이것은 기괴한 요구 사항입니다! 그것은 무언가가 재 설계를 원한다는 것을 암시합니다. 너는 그것을 위해 무엇을 필요로 하는가? – TonyK

+0

@TonyK : 요구 사항을 변경할 수는 없지만 거기에 있습니다. 문제는 프로그래밍 방식보다 수학적입니다. 하지만 내 운을 시험해보고있어. – Neeraj

+0

쿼리 나 함수/프로 시저에서 이걸 필요합니까? –

답변

5

싶은 것은 거의 "모듈로 산술"의 정의입니다. 데이터베이스의 내장 산술 연산이 충분히 빠르게 계산을 수행 할 수 없다면, 자신의 데이터베이스 엔진을 작성하거나 고성능 하드웨어를 구입하는 것이 얼마나 짧은지 잘 모르겠습니다.

문제는 실제로 산술의 속도입니까, 아니면 레코드 검색 또는 색인 생성입니까? 난 당신이 같은 말을하는 경우, 의미 :

select ... whatever ... from table1 join table2 using (someid) 
where (table1.q/table2.d) % 10 = 4 

을하고 기능 (table1.q/table2.d) 10 %에 인덱스가없는,이 모든 기록을 읽을 수있는 DB를 필요 , 계산을 수행 한 다음 정답을 제시하는 것을 골라야합니다. 문제는 산술이 아니라 인덱싱 일 수 있습니다.

관련 문제