숫자에 관한 모든 것

주간 도전 169



Challenge , My solution

긴 휴식을 마치고 돌아왔습니다. 더 이상 고민하지 않고 이번 주에 두 가지 챌린지를 살펴보겠습니다.

작업 1: 화려한 숫자





처음 20개의 Brilliant Numbers를 생성하는 스크립트를 작성하십시오.

브릴리언트 넘버는 같은 길이의 두 소인수를 가진 숫자입니다.

숫자는 정확히 두 개의 소인수를 가져야 합니다. 즉, 동일한 길이의 두 소수의 곱입니다.

내 솔루션



이것은 우리가 그렇게 작은 숫자를 다루고 있다는 것을 감안할 때 무차별 대입하는 것이 더 쉬운 작업 중 하나입니다. 기본 함수에는 소수의 길이에 대한 값l이 있습니다. 그런 다음 get_bril_nums 함수를 호출하여 모든 훌륭한 숫자를 얻습니다.

이 작업은 다음 세 단계로 수행됩니다.
  • 길이가 l인 모든 소수를 가져옵니다.
  • 여러 개의 각 소수
  • 결과를 숫자로 정렬

  • 적어도 20개의 숫자가 계산될 때까지 계속 이 작업을 수행합니다(우리가 알고 있듯이 l == 2 ). 그런 다음 처음 20개의 숫자를 인쇄합니다.

    예시




    $ ./ch-1.py 
    4, 6, 9, 10, 14, 15, 21, 25, 35, 49, 121, 143, 169, 187, 209, 221, 247, 253, 289, 299
    


    작업 2: 아킬레스 수





    처음 20개Achilles Numbers를 생성하는 스크립트를 작성합니다.

    내 솔루션



    이 작업은 첫 번째 작업보다 더 어려운 작업이며 작성 당시 Mohammad의 설명이 정확하지 않다는 점을 강조했습니다. 나는 그를 가지고 있으니 잘만되면 고쳐질 것입니다.

    이 작업을 위해 20개의 숫자를 찾을 때까지 증가하는 카운터를 사용하여 is_achilles_number를 계속 호출합니다. 이 기능은 다음을 수행합니다.
  • 키가 소수이고 값이 거듭제곱인 factors 사전(Perl의 해시)에 고유한 소인수를 가져옵니다.
  • powers 집합(Perl의 배열)을 검정력 값으로 설정합니다. 이 시점에서 우리는 더 이상 소인수에 대해 신경쓰지 않습니다.
  • 값이 하나만 있거나(단일 숫자의 거듭제곱) 거듭제곱이 1이면 False를 반환합니다(Perl에서는 undef).
  • 거듭제곱의 greatest common divisor이 1이 아니면 False를 반환합니다(undef).
  • 반품 True .

  • 예시




    $ ./ch-2.py 
    72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125, 1152, 1323, 1352, 1372, 1568, 1800
    

    좋은 웹페이지 즐겨찾기