2010-11-24 3 views
3

나는 처음 26 개의 소수를 곱하면된다. 이를 위해서는 52 비트 이상의 정밀도가 필요합니다. 최대 두 배는 처리 할 수 ​​있으며 소수점 이하 28-29 자릿수 이상을 제공 할 수 있습니다. 이처럼 큰 숫자에서 곱셈과 나눗셈을 수행하기위한 전략은 무엇입니까?최대 십진수보다 큰 숫자로 작업하기

또한이 작업을 수행하기 위해 뛰어 내야하는 모든 성능에 미치는 영향은 무엇입니까?

최초의 22 개 소수 (가장 내가 과학 모드로 떨어없이 내 계산기에 함께 곱할 수)의 제품은 다음과 같습니다

10,642,978,845,819,148,849,204,664,294,430 

마지막 네의 제품은

72,370,439 
입니다 함께 곱하면

, 내가 얻을 :

7.7023705133964511682328635583552e+38 

성능 영향을 미칩니다을 여기서 특히 중요합니다. 왜냐하면 근본적인 문자열 비교 솔루션이 문자의 직선 비교보다 실제 속도가 빠른지 여부를 묻는 질문을 근본적으로 해결하려고하기 때문입니다. 이 조사를 요청한 소식은 here입니다. 프로세서는 부동 소수점 계산을 위해 최적화되어 있습니다. 이상적으로는 내가 끝내는 해결책이 무엇이든지간에 최적화의 많은 부분을 활용하고 싶습니다.

TIA!
James

추신 : 내가 가진 코드는 경쟁 솔루션을위한 코드입니다. 나는 소수 솔루션이 더 빠를 것이라고는 생각하지 않지만 가능한 한 가장 공정한 기회를주기 위해 노력하고 있습니다.

답변

6

BigInteger은 C# 4.0에서 사용할 수 있습니다. 이전 버전의 경우, 오픈 소스 라이브러리가 필요하다고 생각합니다. this one

+0

4.0에서이 작업을 수행 할 수 있습니다. 아직 많이 사용하지는 않았지만 완벽 할 것입니다. 당신이 링크 한 라이브러리는 꽤 인상적입니다 ... 나는 아마도 그것이 필요하지 않았지만 2002 년 이후로 업데이트되지 않았다는 것에 놀랐습니다. 근원을 확인해 볼게. 아주 좋아! –

+0

@James : 주어진 링크는 오픈 소스 사이트에 우수한 오픈 소스 라이브러리가 많이 있다는 것을 보여주는 예일뿐입니다. 다음에 도서관이 필요할 때 찾아보십시오. –

0

나는 인터뷰 질문에 대해 링크 된 게시물을 읽었습니다. 이 큰 정수를 단지 곱하고 나누기 때문에, 거대한 최적화는 그것들을 소수 분해 양식으로 유지하는 것입니다. 각각의 큰 정수는 int의 배열 [0..25]이며, 각 요소는 인수 분해의 n 번째 소수의 지수를 나타냅니다. 이 형식으로 두 개의 큰 정수를 곱하려면 간단히 지수를 요소별로 추가하십시오. 나누기, 지수를 뺍니다.

그러나 이것은 두 문자열의 문자 수를 도표화하는 것과 같습니다.

+0

흠, 잘 모르겠다. 설명해 주실 수 있나요? –