N에 대한 참고 사항!


32

JE Maxfield는 정리에 따라 입증되었습니다 ( DOI : 10.2307 / 2688966 참조 ).

경우 갖는 정수 긍정적 인 숫자는 양의 정수가 존재 등이 제 자릿수정수 구성합니다 .AmNmN!A

도전

당신의 도전은 에 해당하는 찾습니다 .A1N1

세부

  • N!계승N!=123N 나타냅니다 ! = 1 \ cdot 2 \ cdot 3 \ cdot \ ldots \ cdot NN 입니다.
  • 우리의 경우 A 의 숫자는 밑이 10 것으로 이해됩니다 .
  • 충분한 시간과 메모리가 주어지면 임의의 제출해야합니다 . 정수를 나타 내기 위해 예를 들어 32 비트 유형을 사용하는 것만으로는 충분하지 않습니다.A1
  • 가능한 최소 을 출력 할 필요는 없습니다 .N

A            N
1            1
2            2
3            9
4            8
5            7
6            3
7            6
9           96
12           5
16          89
17          69
18          76
19          63
24           4
72           6
841      12745
206591378  314

각 에 대해 가능한 최소 은 https://oeis.org/A076219 에서 찾을 수 있습니다.N에이


26
나는 ... 왜 그 정리를 증명 했는가? 그는 어느 날 깨어나서 "나는 이것을 해결할 것이다!"라고 말했습니까? 아니면 목적을 달성 했습니까?
매직 문어 항아리

11
@MagicOctopusUrn 이전에 수 이론가를 다루지 않았습니까?
Brady Gilg

2
여기에 누구나 관심이 있다는 증거가 있습니다.
Esolanging 과일

답변:


14

파이썬 2 , 50 바이트

f=lambda a,n=2,p=1:(`p`.find(a)and f(a,n+1,p*n))+1

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

이것은 아래에 설명 된 47 바이트 솔루션의 변형으로 1입력 을 위해 반환 되도록 조정되었습니다 '1'. (즉, 우리 1는 재귀 호출이 아닌 전체 표현식에 추가 n==2하고 하나의 깊이 계층을 제거하기 위해 계산을 시작 하여 모든 비 '1'입력에 대해 결과를 균형 조정합니다 .)

Python 2 , 45 바이트 (맵 1 ~ True)

f=lambda a,n=2,p=1:`-a`in`-p`or-~f(a,n+1,p*n)

이것은 @Jo King과 @xnor의 또 다른 변형으로, 입력을 숫자로 취하고 input을 반환 True합니다 1. 어떤 사람들은 이것이 공정한 게임 이라고 생각 하지만 개인적으로는 조금 이상하다고 생각 합니다.

그러나 icky Boolean 결과를로 감싸는 데 3 바이트 밖에 걸리지 않아 +()더 짧은 "좋은"솔루션을 얻을 수 있습니다.

파이썬 2 , 48 바이트

f=lambda a,n=2,p=1:+(`-a`in`-p`)or-~f(a,n+1,p*n)

이것은 내 이전 솔루션이며 0input 을 반환 합니다 '1'. 질문 이 음수N아닌 경우에는 유효했을 것 입니다.

Python 2 , 47 바이트 (잘못된)

f=lambda a,n=1,p=1:`p`.find(a)and-~f(a,n+1,p*n)

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

처럼 문자열을 입력으로 f('18')받습니다.

여기서의 요령은 x.find(y) == 0바로 그 때 x.startswith(y)입니다.

- and표현식은 다음 `p`.find(a)0같이 `p`시작 하자마자 결과 를 단락시킵니다 a. 그렇지 않으면 -~f(a,n+1,p*n)id est로 평가됩니다 1 + f(a,n+1,p*n).

최종 결과는 1 + (1 + (1 + (... + 0))), n그래서, 깊은 층 n.


그런데 좋은 해결책. 나는 같은 방법으로 일하고 있었지만 각 반복에서 계승을 계산했다. +1어쨌든 당신의 접근 방식을 구현하면 몇 바이트가 절약 되었습니다.
Shaggy

1
True-for-1 버전의 경우 기본 사례 조건a숫자로 사용하여 단축 할 수 있습니다 .
xnor

@ xnor 나는`` -a-p'', 그것은 깔끔한 트릭입니다 생각하지 않았을 것 입니다 :
Lynn

N이 짝수 값으로 제한 되어도 증명이 여전히 유지되면 이 45 바이트 솔루션 은 항상 숫자를 출력합니다.
부정적

9

Brachylog , 3 5 바이트

ℕ₁ḟa₀

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

출력 변수를 통해 입력을 받고 입력 변수를 통해 출력합니다. (또 다른 방법으로는 입력 계승의 임의의 접두사를 찾는 것만 큼 흥미롭지는 않습니다.) TIO의 두 번째에서 마지막 테스트 케이스에서는 시간이 초과되지만 마지막 테스트 에서는 잘 수행됩니다 . 나는 이것을 쓸 때 몇 분 동안 랩톱에서 841에서 실행했으며 실제로 대답을하지는 않았지만 그것을 믿습니다.

         The (implicit) output variable
   a₀    is a prefix of
  ḟ      the factorial of
         the (implicit) input variable
ℕ₁       which is a positive integer.

유일한 입력 ḟa₀이 작동하지 않기 때문에 1은 1이고 1은 양의 접두사 1입니다! = 1, 1|ḟa₀마찬가지로 작동합니다.

또한이 편집 시점에서 841은 거의 3 시간 동안 실행되었으며 여전히 출력을 생성하지 않았습니다. 1에서 12745까지의 모든 정수의 계승을 계산하는 것이 빠르지 않다고 생각합니다.


2
Brachylog에서 계승 술어의 구현은 약간 복잡하여 수용 가능한 효율성으로 두 가지 방식으로 사용될 수 있습니다. 계승을 계산하기 위해 훨씬 빠른 알고리즘을 구현할 수는 있지만 다른 방식으로 실행하는 것은 매우 느릴 것입니다 (즉 계승에서 원래 숫자 찾기).
치명적

오, 멋지다! 그 출처를 보면 모든 일을 말할 수는 없지만 그것에 대해 많은 생각을 할 수 있다고 말할 수 있습니다.
관련이없는 문자열

7

C ++ (gcc) , 107 95 바이트, -lgmpand-lgmpxx

어리석은 실수를 지적한 사람들의 의견에 감사드립니다.

#import<gmpxx.h>
auto f(auto A){mpz_class n,x=1,z;for(;z!=A;)for(z=x*=++n;z>A;z/=10);return n;}

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

! 계산합니다 ! (1)! 을 곱하여 ! 하여 다음 반복하여 분할한다 10 가 통과 정수보다 더 클 때까지 없다. 이 시점에서 계승이 전달 된 정수와 같으면 루프가 종료되고 그렇지 않으면 다음 진행합니다 .


당신은 필요하지 않습니다 이 그래서 더 이상 플래그를 계산하는 107바이트.
AdmBorkBork

왜 두 번째 세미콜론이 필요한 return가요?
Ruslan

함수에 단일 문자 이름을 사용하여 몇 바이트를 저장할 수 있습니다.
Shaggy




2

자바 스크립트, 47 43 바이트

BigInt로 출력합니다.

n=>(g=x=>`${x}`.search(n)?g(x*++i):i)(i=1n)

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

Lynn이 각 반복에서 팩토리얼을 계산하는 대신 팩토리얼을 "빌딩"하는 접근 방식을 사용하여 몇 바이트를 절약했습니다.


안타깝게도, _Ês bU}f1Japt에서는 작동하지 않습니다
무지의 구체화

@EmbodimentofIgnorance, 그래, 나도 그랬어. 이후에 공백을 제거 할 수 s있습니다.
Shaggy

@EmbodimentofIgnorance, 1if 0를 반환 할 수도 있습니다 n=1.
Shaggy

3 바이트 미만 :x=i=1n;f=n=>`${x*=++i}`.search(n)?f(n):i
vrugtehagel

@vrugtehagel, 재사용 할 수 없습니다.
얽히고 설킨


1

젤리 , 16 바이트

‘ɼ!³;D®ß⁼Lḣ@¥¥/?

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

설명

‘ɼ                | Increment the register (initially 0)
  !               | Factorial
   ³;             | Prepend the input
     D            | Convert to decimal digits
        ⁼   ¥¥/?  | If the input diguts are equal to...
         Lḣ@      | The same number of diguts from the head of the factorial
      ®           | Return the register
       ß          | Otherwise run the link again

1

펄 6 , 23 바이트

{+([\*](1..*).../^$_/)}

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

설명

{                     }  # Anonymous code block
   [\*](1..*)            # From the infinite list of factorials
             ...         # Take up to the first element
                /^$_/    # That starts with the input
 +(                  )   # And return the length of the sequence

1

, 16 바이트

⊞υ¹W⌕IΠυθ⊞υLυI⊟υ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

⊞υ¹

푸시 1가 정의 된 제품과 함께 시작합니다 있도록 빈 목록.

W⌕IΠυθ

목록의 제품 시작 부분에서 입력을 찾을 수없는 동안 반복하십시오 ...

⊞υLυ

... 목록의 길이를 자체로 푸시합니다.

I⊟υ

목록에 마지막으로 누른 값을 인쇄하십시오.



1

J , 28 22 바이트

FrownyFrog 덕분에 -6 바이트

(]+1-0{(E.&":!))^:_&1x

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

원래 답변 J , 28 바이트

>:@]^:(-.@{.@E.&":!)^:_ x:@1

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

  • >:@] ... x:@1확장 정밀도로 시작 1하면서 계속 증가시킵니다 ...
  • -.@ 그렇지 않은 경우 ...
  • {.@ 첫 번째 느릅 나무는 시작 경기입니다 ...
  • E.&":모든 하위 문자열 &":은 원래 입력을 검색하는 ( 두 인수를 모두 문자열 화 한 후) 일치합니다 ...
  • ! 증가하는 숫자의 계승

(]+1-0{(E.&":!))^:_&1x
FrownyFrog

나는 전통을 피하기 위해 "고정 점"을 사용하는 것을 좋아합니다.
요나

1

C (gcc) -lgmp, 161 바이트

#include"gmp.h"
f(a,n,_,b)char*a,*b;mpz_t n,_;{for(mpz_init_set_si(n,1),mpz_init_set(_,n);b=mpz_get_str(0,10,_),strstr(b,a)-b;mpz_add_ui(n,n,1),mpz_mul(_,_,n));}

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


strstr(b=mpz_get_str(0,10,_),a)-b;mpz_mul(_,_,n))mpz_add_ui(n,n,1)대신 추천b=mpz_get_str(0,10,_),strstr(b,a)-b;mpz_add_ui(n,n,1),mpz_mul(_,_,n))
ceilingcat

1

파이썬 3 , 63 바이트

f=lambda x,a=2,b=1:str(b).find(str(x))==0and a-1or f(x,a+1,b*a)

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

Jo King 덕분에 -24 바이트

Chas Brown 덕분에 -3 바이트


@ JoKing 감사합니다
HyperNeutrino


@ChasBrown 감사
HyperNeutrino

나는 생각 f=머리글에있어 것을이 당신의 비트 수에 반영 할 예정이다.
mypetlion

@mypetlion 당신이 맞습니다; 그것을 잡아 주셔서 감사합니다.
HyperNeutrino






0

하스켈, 89 바이트

import Data.List
a x=head$filter(isPrefixOf$show x)$((show.product.(\x->[1..x]))<$>[1..])

필요한 수입을 우회하는 방법을 아는 사람이 있으면 알려주십시오.


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