计算数字,除数版


11

在数学上受到这个问题的启发。

让一个数的因式分解,Ñ,被表示为P(N)= 2 一个 ×3 b ×5 Ç X ...
(使用X作为乘法符号。)
接着的约数的数目Ñ可以表示为d(N)=(A + 1)×(B + 1)×(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)=2P(z)=zD(z)=2
  • wxn的除数-D(xn)=w
  • yzn的除数-D(zn)=y

对于链接问题中给出的问题,输入示例可以为(28, 2, 30, 3)。这转化为D(2n)=28D(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 '16

Answers:


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 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.