2014-03-02 2 views
0

나는 몇 개의 작은 소수의 산물 인 매우 큰 숫자를 가지고있다. 나는 숫자를 알고 또한 중요한 요소를 알고 있지만 나는 그들의 힘을 모른다. 예 :숫자의 힘을 찾는다

(2^a)x(3^b)x(5^c)x(7^d)x(11^e)x .. = 2310 

이제 지수를 매우 빠르고 효율적으로 복구하려고합니다. FPGA로 구현하고 싶습니다.

감사합니다,

+1

안녕하십니까. 해결책을 제시해주십시오. 우리는 당신을 위해 일하기 위해 여기에 온 것이 아닙니다. – LeonardBlunderbuss

+0

내가 시도한 것은 소수를 반복적으로 unitl 단위로 나누는 것이다. 그때 나에게 힘을주는 각 요인에 대한 분열의 수를 세지. 하지만 제가 언급 한 것처럼 제품이 매우 거대 해지면 이것은 실용적이지 않습니다. – hassicho

+0

2310을 2 회 이상 'a'회 이상 반복해서 나누면 일부 분수로 끝납니다. 그러나 'a'까지, 당신은 0 분수를 얻을 것입니다. 카운팅이 도움이되지만 너무 느립니다. – hassicho

답변

2

문제는 당신이 이진 검색을 수행해야 올바른 전원에 대한 선형 검색을하고 있다는 것입니다. 다음은 p의 지수가 10 인 경우를 보여주는 예제입니다 (p^10). 이 방법은 O (N) 대신에 O (log N) 개의 구획에서 힘을 찾는다.

처음에는 5 단계에서 발생하는 너무 높은 전원을 빠르게 증가시켜 상한선을 찾으십시오. 그런 다음 이진 검색을 사용하여 실제 전력을 찾습니다.

  1. p. 공장.
  2. p^2로 나눌 수 있는지 확인하십시오. 공장.
  3. p^4로 나눌 수 있음을 확인하십시오. 공장.
  4. p^8로 나눌 수 있음을 확인하십시오. 공장.
  5. p^16으로 나눌 수 있음을 확인하십시오. 작동하지 않습니다. 이것을 실행 취소하거나 무시하십시오.
  6. p^((8 + 16)/2) = p^12로 나눌 수 있는지 확인하십시오. 작동하지 않습니다. 이것을 실행 취소하거나 무시하십시오.
  7. p^((8 + 12)/2) = p^10으로 나눌 수 있는지 확인하십시오. 작동하지만 너무 낮을 수 있습니다.
  8. p^((10 + 12)/2) = p^11으로 나눌 수 있는지 확인하십시오. 작동하지 않습니다. 이것을 실행 취소하거나 무시하십시오.
  9. ((10 + 11)/2) = 10.5이 정수가 아니기 때문에, 대부분의 전력은 실제로 P로 분할하는 방법이 있고, 10

참고 인 저가형 될 , 단계 4에서 p^(1 + 2 + 4 + 8) = p^15로 숫자를 실제로 나누었지만 이진 검색 부분을 설명하는 것이 조금 더 어렵습니다. 그러나 분할되는 숫자의 크기가 작아 지므로 분할 작업이 더 빠릅니다.

+0

고맙습니다. 도움이됩니다. – hassicho