요인을 공유하는 가장 작은 미사용 번호


11

이것은 밀 질문의 꽤 실행됩니다. 시퀀스를 정의하고 인덱스가 주어진 항목을 출력하는 코드를 골라냅니다.

  • 시퀀스의 첫 번째 항목은 2입니다.

  • 시퀀스의 n 번째 항목은 n 및 1 이외의 가장 작은 양의 정수이며, 목록에 아직 나타나지 않은 n (1 이외)과 하나 이상의 요인을 공유합니다.

테스트 사례

순서의 처음 25 개 항목은 다음과 같습니다.

1  2
2  4
3  6
4  8
5  10
6  3
7  14
8  12
9  15
10 5
11 22
12 9
13 26
14 7
15 18
16 20
17 34
18 16
19 38
20 24
21 27
22 11
23 46
24 21
25 30

관련 (하나에 의해 상쇄) OEIS

답변:



3

파이썬 (3) , 118 (117) 바이트

Cameron Aavik 덕분에 -1 바이트 !

import math
def f(n,i=3):
 if n<2:return 2
 while 1:
  if math.gcd(n,i)>1>(i in map(f,range(n)))<i!=n:return i
  i+=1

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

코드는 매우 비효율적입니다 (이전 결과에는 존재하지 않는 값을 강제하고 모든 새로운 값에서 이전 결과를 다시 계산합니다). 그래서 제대로 작동하지만 큰 숫자로 실행하지 않는 것이 좋습니다.


2
작은 팁 : 당신은 그것을 만들어 줄 바꿈을 절약 할 수 있습니다 def f(n,i=3):및 제거 i=3선을
카메론 Aavik


2

하스켈 , 60 59 바이트

편집하다:

  • -1 바이트 : @xnor 지적한 all(/=x)것이보다 짧습니다 x`notElem`.

f 정수를 받아서 정수를 반환합니다.

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:map f[1..n-1]]!!0

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

이것은 매우 기하 급수적 인 시간이므로, 21시 이후에 TIO가 시간 초과되는 반면, 해석 한 GHCi가 22 시간까지 올라갔습니다. 리스트에 기억되는 다음 9 바이트 더 긴 버전은 쉽게 수천으로 올라갑니다.

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:take(n-1)l]!!0
l=f<$>[1..]

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

  • f n목록 이해력을 사용하여 후보를 생성 x하고, 첫 번째 전달 대상을 사용 !!0합니다.
  • gcd x n>1검사 xn공통 요소를 가지고있다.
  • ||n<2n==1요인 요구 사항에서 면제 됩니다.
  • all(/=x)$n:map f[1..n-1]이것이 시퀀스 요소 x가 아닌지 확인합니다 n.

@WheatWizard 흠, 아마도 그 경우에는 차이가 없을 것입니다. 기본적으로 수행하는 데 사용됩니다. 이 방법으로 잘 고정되도록 고정 수가있는 몇 가지 영숫자 함수 중 하나입니다.
Ørjan Johansen 2016 년

1
all(/=x)$거기 1 짧은
XNOR

2

C #에는 GCD 용 내장 기능이 없으므로 ...

C # (. NET 코어) , 1979696194 바이트

n=>{if(n<2)return 2;var p=new int[n-1];int i=0,a,b;for(;i<n-1;)p[i]=f(++i);for(i=2;;i++)if(n!=i){for(a=n,b=i;a*b>0;)if(a>b)a%=b;else b%=a;if(b!=1&a!=1&!System.Array.Exists(p,e=>e==i))return i;}}

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

다시 한번,이 코드를 사용하여 시퀀스의 숫자를 계산하지 마십시오 n>30...

  • 공약수를 변경함으로써, 바이트 -1 whileA의 루프를 for루프.
  • Kevin Cruijssen 덕분에 -2 바이트! 좋은 것!

1
a>0&b>0에 골프 수a*b>0
케빈 크루 이슨

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