문제

내가 원하는 분은 정수로 자신의 요소입니다.예를 들어,만약 총 수의 레코드:

169 - ( 13 x 13 times) 
146 - ( 73 x 2 times) 
150 - ( 50 x 3 times)
175 - ( 25 x 7 times)
168 - ( 84 x 2 ) 
160 - ( 80 x 2 times) 

을 때보다 더 많은 10k-나는 모두에서 1000 을 때보다 더 많은 100k-나는 원하는 모든 것에 10k

이 방식에서 내가 원하는 요소의 번호입니다.이것을 달성하는 방법?이 있 펄 모듈을 사용할 수 있는 이러한 종류의 숫자 작업?

가정 레코드의 전체 수은 10k.그것이 있어야에 의해 분할 1000x10 번만100 이 아닌 또는 10 초입니다.

나는 사용할 수 있는 sqrt 기능입니다.그러나 그것은 항상 무엇이 내가 기대하고있다.제가 만약 입력 146,I have to get(73,2).

도움이 되었습니까?

해결책

동일하게 사용할 수 있습 알고리즘을 찾기 위해 다른 언어에는 Perl.이 없 Perl 특별한 마법에서 아이디어.그것은 단지 구현이고,무언가를 위해 다음과 같이 문제,그것은 아마 매우 유사한 구현에서 어떤 언어입니다.

무엇이 문제를 해결하려고 합니까?어쩌면 우리는 당신을 가리킬 수 있습에서 바로 알고리즘 우리가 알고있는 경우에 당신이 무엇을 하려고 하:

  • 해야 하는 이유는 무엇 숫자 10,000 를 사용하여 1,000 요인은 무엇입니까?대부분의 숫자가 있지 않을 것이 1,000 요소입니다.
  • 당신이 원하는 모든 요인,또는 가장 크고 그것의 동반자가?
  • 당신은 무엇을 의미하는 sqrt 기능이 작동하지 않으로 기대할 수 있을까요?는 경우 다음과 같은 일반적인 알고리즘을 반복하고 바닥까지의 제곱근을 테스트하는 위해 요소입니다.대부분 정수 없는 필수적인 사각형 뿌리입니다.

다른 팁

숫자가 프라임이 아닌 경우 팩토링 알고리즘을 사용할 수 있습니다.

이러한 기능의 예가 여기에 있습니다. http://www.classhelper.org/articles/perl-by-example-factoring-numbers/factoring-numbers-with-perl.shtml

허용 가능한 범위 (예 : 9 ~ 15)의 일부 공통 숫자를 루프하고 나머지 모듈로 계산하고 가장 낮은 것을 선택하십시오.

sub compute_width {
    my ($total_records) = @_;
    my %remainders;
    for(my $width = 9; $width <= 15; $width += 1) {
      my $remainder = $total_records % $width;
      $remainders{$width} = $remainder;
    }
    my @widths = sort { 
      $remainders{$a} <=> $remainders{$b} || 
      $a <=> $b 
    } keys %remainders;
    return $widths[0];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top