要因を共有する最小の未使用数


11

これは、工場の質問のかなりの実行です。シーケンスを定義し、インデックスを指定してエントリを出力するコードをゴルフします。

  • シーケンスの最初の項目は2です。

  • シーケンスのn番目の項目は、nと1以外の最小の正の整数で、リストにまだ現れていないn(1以外)と少なくとも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

関連(1つオフセット)OEIS

回答:



3

Pythonの3118の 117バイト

キャメロン・アヴィックのおかげで-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

Haskell60 59バイト

編集:

  • -1バイト:指摘されall(/=x)た@xnorは未満x`notElem`でした。

f 整数を受け取り、整数を返します。

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

オンラインでお試しください!

これは非常に指数関数的な時間であるため、TIOは21後にタイムアウトしますが、解釈した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]それxn前のシーケンス要素でもないこともチェックします。

@WheatWizard Hm、その場合はおそらく違いはありません。デフォルトでそれを行うのに慣れています。これは、そのように適合するように定義された固定性を持つ数少ない英数字関数の1つです。
Ørjanヨハンセン

1
all(/=x)$1が短い
XNOR

2

C#にはGCDが組み込まれていないため、...

C#(.NET Core)197 196 194バイト

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...

  • whileループのGCD ループを変更して-1バイトfor
  • -2バイト、Kevin Cruijssenに感謝!良いですね!

1
a>0&b>0にゴルフすることができますa*b>0
ケビンCruijssen

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.