인수 분해 게임


13

입력

단일 정수 .1x1015

산출

곱이 인 고유 양수의 최대 개수입니다 .x

입력 : 1099511627776. 출력 : 9. 가능한 최적 요인 목록 중 하나는 (1, 2, 4, 8, 16, 32, 64, 128, 4096)입니다.

입력 : 127381. 출력 4. 가능한 최적의 요인 목록 중 하나는 (1, 17, 59, 127)입니다.

오래된 질문과 관련이 있습니다.


9
몇 가지 테스트 사례를 추가 할 수 있습니까? (바람직하게는 적당한 크기입니다.)
Arnauld

8
대부분의 답변에 대한 귀하의 의견을 감안할 때 효율적인 코드를 찾고 있다면 태그가 태그로 표시되어서는 안됩니다 code-golf. 당신도 고려할 수 있습니다 fastest-code또는 fastest-algorithm다가오는 도전. 지정된 범위 내에서 제한된 시간 내에 모든 답변을 실제로 사용하려면 명시 적으로 언급해야합니다. (그리고 code-golf전적으로 충돌하지 않도록 더 작은 범위를 권장했을 것 입니다.)
Arnauld

@Arnauld 아니요 코드 골프를 만들려고 조심하고 아무도 그것을 판단하지 않습니다. 지정된 입력 범위에 대해 코드를 실행할 수 있다면 멋질 것입니다.
Anush


1
들어 x=1, 2, ...내가 얻을 수 f(x)=1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 3, 4, 2, 3있는 나는 OEIS에서 찾을 수 없습니다. 계승 수에 대한 레코드가 표시 될만큼 충분히 분명합니다 x. 예를 들어 작은 x등이 f(x)=13될 것입니다 13!. 나는 f소인수 분해의 지수에만 의존한다고 생각합니다. 따라서 f(13^4*19^7*29^2)우리는로 단순화 할 수 있습니다 f(2^7*3^4*5^2).
Jeppe Stig Nielsen 1

답변:


5

Wolfram Language (Mathematica) , 52 바이트

Max[Length/@Cases[Subsets@Divisors@#,{a__}/;1a==#]]&

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

@attinat 덕분에 4 바이트 절약

계산 하고 계산 하는 153 바이트 버전 도 있습니다.109951162777610^15

Max[Length/@Table[s=RandomSample@Flatten[Table@@@FactorInteger[#]];Last@Select[Times@@@TakeList[s,#]&/@IntegerPartitions@Length@s,DuplicateFreeQ],5!]]+1&      

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

결과 10^1512

{1, 2, 4, 5, 10, 16, 25, 40, 50, 100, 125, 250}


1099511627776과 충돌
Anush

7
@Anush 그것은 충돌하지 않습니다. 메모리 만 있으면됩니다. 메모리 제한에 대해서는 아무 말도하지 않았습니다. 이것은 코드 골프입니다
J42161217

예, 알고 있습니다. 실제로 질문에 지정된 입력 범위의 코드를 실행할 수 있다면 좋을 것입니다.
Anush

6
@Anush 이것은 코드 골프입니다. 좋은 답변이 아닙니다. 기준을 지정하십시오. 답은 유효하다. 여기 문제가 문제라고 생각합니다. 아마도 "가장 충분한 알고리즘"으로
바꾸어야 할 것입니다.

3
@Anush 내 답변을 편집하고 확인하고 싶을 때 정말 빠르고 효율적인 버전을 하나 더 추가했습니다.
J42161217


3

05AB1E , 9 바이트

매우 비효율적입니다. 제수가 많은 숫자의 경우 TIO에서 시간 초과됩니다.

ÑæʒPQ}€gZ

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

설명

Ñ          # push a list of divisors of the input
 æ         # push the powerset of that list
  ʒPQ}     # filter, keep only the lists whose product is the input
      €g   # get the length of each
        Z  # take the maximum

TIO 코드는 9 대신 3을 출력하는 것 같습니다.
Anush

@ Anush : 많은 요인으로 인해 시간이 초과되기 때문에 귀하의 예와 다른 숫자입니다. 아마도 더 분명한 예를 사용해야합니다.
Emigna

€gZéθg동일한 바이트 수보다 약간 더 효율적 입니다.
Grimmy

@ 그림 : 참. 그것은 큰 나쁜 녀석 인 필터이기 때문에 별 차이가 없지만 조금 더 효율적이되는 것은 아프지 않습니다 :)
Emigna

2

펄 6 , 38 바이트

{$!=$_;+grep {$!%%$_&&($!/=$_)},1..$_}

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

제수 선택에 대한 탐욕스러운 접근 방식을 취합니다.


1099511627776로 끝나지 않습니다
Anush

6
@Anush 글쎄, 결국 종료됩니다 . 일반적으로 프로그램의 알고리즘이 원하는만큼의 메모리와 시간이 주어진 경우 프로그램의 알고리즘이 모든 입력에서 작동하는 경우에 답이 유효합니다. 이것이 코드 골프 이기 때문에 알고리즘 복잡성이 아니라 코드 길이에 맞게 최적화했습니다
Jo King

2

자바 스크립트 (ES6), 39 바이트

f=(n,i=0)=>n%++i?n>i&&f(n,i):1+f(n/i,i)

여기저기서 저장할 수있는 몇 바이트가있을 것입니다. 욕심 많은 알고리즘을 요인에 사용하십시오.


2

젤리 , 9 바이트

ŒPP=³ƊƇẈṀ

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

누군가 덕분에 -1 바이트

ErikTheOutgolfer 덕분에 -2 바이트


OEIS superseeker에 대한 입력을 준비하는 동안 11 바이트의 골프 용 젤리 프로그램 (다른 접근법을 사용함)을 만들었으며 젤리 답변을 게시 할 가능성이 없으므로 솔루션에서 1 바이트를 골프로 칠 ÆE×8‘½’:2S‘것입니다. A003056에 대한 OEIS "공식"섹션의 기능과 함께 작동합니다. 면책 조항 : 잘못되었을 수도 있지만 테스트 사례에서 작동합니다.
내 대명사는 monicareinstate입니다.

1099511627776
Anush

@someone은 36에서 작동하지 않지만 감사합니다.
HyperNeutrino

@Anush 그렇습니다. 효율성을 위해 최적화되지 않은 코드로 코딩했기 때문에 속도가 느립니다
HyperNeutrino

1
ÆDx21


2

Brachylog , 8 바이트

f;?⟨⊇×⟩l

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

(순진한 접근 방식 {~×≠l}ᶠ⌉은을 제거하기 전에 추가 1을 가진 무한한 수의 솔루션을 생성 하므로 실제로 종료되지 않습니다. 그러나 동일한 바이트 수이기 때문에 문제가되지 않습니다!)

입력 변수를 통해 입력을 받고 출력 변수를 통해 출력합니다. TIO의 헤더에는 요인 목록이 무엇인지 보여주기 위해 대부분의 코드 사본이 포함되어 있지만 이것이 없으면 완벽하게 작동합니다. 더 큰 서브리스트를 먼저 제공 하므로 ,이 술어는 본질적으로 대부분의 다른 답변과 동일한 기능을 수행하지만 역 추적 덕분에 요인의 완전한 파워 세트를 명시 적으로 생성 및 필터링하지 않습니다.

            The output
       l    is the length of
    ⊇       a sublist (the largest satisfying these constraints)
f           of the factors of
            the input
 ; ⟨  ⟩     which
     ×      with its elements multiplied together
  ?         is the input.


1

Gaia , 10 9 바이트

Π=
dz↑⁇(l

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

다른 곳에서 볼 수있는 것과 동일한 "알고리즘"을 따릅니다. 숫자와 같은 곱으로 가장 긴 제수 전력 집합을 필터링하고 길이를 반환합니다.

	| helper function
Π=	| is prod(list)==n (implicit)?
	|
	| main function; implicitly takes n
dz	| divisor powerset (in decreasing order of size)
  ↑⁇	| filter by helper function
    (l	| take the first element and take the length (implicitly output)

0

조개 , 15 바이트

p}_`nq#:;qQ@s~Q

TIO 링크는 곧 제공 될 예정입니다 (데니스가 당길 때)

기본적으로 @Emigna의 05AB1E 솔루션 포트입니다.

설명

                - Implicit Q = first input
p               - Print...
 }              - The last element of...
  _             - Sorted...
   `nq          - Lengths of... (map q => q.len)
           @s   - Items in powerset of
             ~Q - Proper divisors of Q
      #         - Where... (filter)
        ;q      - Product of subset
       :        - Equals...
          Q     - Q

0

C # (Visual C # 대화식 컴파일러) , 54 바이트

int f(int n,int i=0)=>n%++i<1?1+f(n/i,i):n>i?f(n,i):0;

@vrugtehagel 및 @JoKing의 답변과 동일한 접근 방식을 사용합니다.

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


논리를 올바르게 구현했다고 가정하면 53 바이트 솔루션 ( "return"키워드를 제거 할 수 없음) : 온라인으로 사용해보십시오!
내 대명사는 monicareinstate입니다

1
@someone 감사하지만 메타에 따르면 함수는 재사용 할 수 있어야합니다 . 또한 함수 외부의 선언에 세미콜론을 남기지 않고 메타 게시물을 만들 수 있는지 여부는 알 수 없습니다.
무지의 구체화

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