数の計算、除数版


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)x(b + 1)x(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)=xD(x)=2かつP(z)=zD(z)=2
  • wxnの約数の数です-D(xn)=w
  • yznの約数の数です-D(zn)=y

リンクされた質問で与えられた問題の場合、入力例はになります(28, 2, 30, 3)。これは、に変換D(2n)=28してD(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を超える場合、ソリューションを返すか、ゼロを返すかを選択できますか?
デニス

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