수, 제수 판 계산


11

수학에 관한 이 질문 에서 영감을 얻었습니다 .

숫자 n의 소인수 분해를 P (n) = 2 a x 3 b x 5 c x ... 로 나타내십시오 .
( x 를 곱셈 기호로 사용 )
그러면 n 의 제수는 D (n) = (a + 1) x (b + 1) x (c + 1) ... 으로 나타낼 수 있습니다 .
따라서, 우리는 쉽게의 약수 수 있다고 말할 수 2N가D (2N) = (a + 2) × (b + 1) × (c + 1) ... ,
의 약수의 개수 3N은D (3N ) = (a + 1) x (b + 2) x (c + 1) ...
입니다.

도전:

특정 제수 입력시 이러한 속성을 사용하여 n 을 계산하는 프로그램 또는 함수를 작성하십시오 .

입력:

다음과 같은 정의가 모두 포함 된 정수 집합 w, x, y, z를 호출 해 봅시다 .

  • 모든 입력이 1보다 큽니다. w, x, y, z > 1
  • xz 는 서로 다릅니다.x<>z
  • XZ는 - 소인 P(x)=x, D(x)=2그리고 P(z)=z,D(z)=2
  • 의 약수의 개수 XN은 -D(xn)=w
  • Y는 의 약수의 개수 아연 -D(zn)=y

연결된 질문에 주어진 문제의 경우 입력 예는 다음과 같습니다 (28, 2, 30, 3). 이것은로 변환 D(2n)=28D(3n)=30함께 n=864.

산출:

위의 정의 및 입력 제한을 충족 하는 단일 정수 n 입니다. 여러 숫자가 정의에 적합하면 가장 작은 값을 출력하십시오. 그러한 정수가 가능하지 않으면 거짓 값을 출력하십시오 .

예 :

(w, x, y, z) => output

(28, 2, 30, 3) => 864
(4, 2, 4, 5) => 3
(12, 5, 12, 23) => 12
(14, 3, 20, 7) => 0 (or some other falsey value)
(45, 13, 60, 11) => 1872
(45, 29, 60, 53) => 4176

규칙 :

  • 표준 코드 골프 규칙 및 허점 제한이 적용됩니다.
  • 표준 입 / 출력 규칙이 적용됩니다.
  • 입력 번호는 어떤 순서로든 사용할 수 있습니다. 사용중인 순서를 답으로 지정하십시오.
  • 입력 번호는 공백으로 구분, 배열, 개별 함수 또는 명령 줄 인수 등 원하는 형식으로 지정할 수 있습니다.
  • 마찬가지로 STDOUT으로 출력하는 경우 주변 공백, 후행 줄 바꿈 등은 모두 선택 사항입니다.
  • 입력 구문 분석 및 출력 형식화는이 과제의 흥미로운 기능이 아닙니다.
  • 정상적인 복잡성과 정수 오버플로를 위해 챌린지 번호 n 에는 제한이 있습니다. 1 < n < 100000즉,이 범위 밖의 가능한 답변에 대해 걱정할 필요가 없습니다.

관련


따라서 가장 작은 솔루션이 100,000보다 큰 경우 솔루션 또는 0을 반환하도록 선택할 수 있습니까?
Dennis

@Dennis 코드가 짧아지면 반드시 확인하십시오. 받아 들일 것입니다.
AdmBorkBork

답변:


3

젤리 , 17 16 바이트

×€ȷ5R¤ÆDL€€Z=Ḅi3

이것은 가능한 모든 값을 100,000까지 시도하는 무차별 대입 솔루션입니다. 온라인으로 사용해보십시오!

비경쟁 버전

Jelly의 최신 버전에는 위의 코드를 15 바이트 로 축소 할 수있는 버그 수정이 있습니다 .

ȷ5R×€³ÆDL€€=Ḅi3

온라인으로 사용해보십시오!

작동 원리

×€ȷ5R¤ÆDL€€Z=Ḅi3  Main link. Left input: x,z. Right input: w,y

     ¤            Combine the two atoms to the left into a niladic chain.
  ȷ5              Yield 100,000 (1e5).
    R             Apply range. Yields [1, ..., 100,000].
x€                Multiply each r in the range by x and z.
                  This yields [[x, ..., 100,000x], [z, ..., 100,000z]].
      ÆD          Compute the divisors of each resulting integer.
        L€€       Apply length to each list of divisors.
                  This counts the divisors of each integer in the 2D array.
           Z      Zip; group the divisors of kx and kz in pairs.
            =     Compare each [divisors(kx), divisors(kz)] with [w, y].
                  This yields a pair of Booleans.
             Ḅ    Convert each Boolean pair from binary to integer.
              i3  Find the first index of 3. Yields 0 for not found.

축하합니다. 기본적으로 이깁니다! : D
AdmBorkBork
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.