Answers:
-h
,k ü mÊn
k ü mÊn :Implicit input of integer
k :Prime factors
ü :Group by value
m :Map
Ê : Length
n :Sort
:Implicit output of last element
ü
创建相等值的子数组。它确实还排序值第一,但在这里,是不相关的。
*假设无限堆栈(如代码高尔夫球挑战中那样)
P=(n,i=2,k)=>i>n?k:n%i?k>(K=P(n,i+1))?k:K:P(n/i,i,-~k)
console.log(P(2 )== 1)
console.log(P(3 )== 1)
console.log(P(4 )== 2)
console.log(P(5 )== 1)
console.log(P(6 )== 1)
console.log(P(7 )== 1)
console.log(P(8 )== 3)
console.log(P(9 )== 2)
console.log(P(10 )== 1)
console.log(P(11 )== 1)
console.log(P(12 )== 2)
console.log(P(144 )== 4)
console.log(P(200 )== 3)
console.log(P(500 )== 3)
console.log(P(1024 )== 10)
//console.log(P(3257832488 )== 3)
n->vecmax(factor(n)[,2])
如果我不计算n->
部分,则为21个字节。
/o
\i@/w].D:.t$Kq
/o
\i@/...
这只是带有十进制I / O的简单算法程序的框架。的...
是实际的计划,该计划已经在堆栈上的输入和叶堆栈的顶部输出。
爱丽丝实际上具有内置功能来获取整数的质数分解(即使具有质数-指数对),但是我使用它们得出的最短长度是10字节。
取而代之的是,我们将输入中每个不同素数的一个副本重复除以1,直到达到1。采取的步骤数等于最大的质数指数。我们将滥用磁带头作为计数器变量。
w Remember the current IP position. Effectively starts a loop.
] Move the tape head to the right, which increments our counter.
.D Duplicate the current value, and deduplicate its prime factors.
That means, we'll get a number which is the product of the value's
unique prime factors. For example 144 = 2^4 * 3^2 would become
6 = 2 * 3.
: Divide the value by its deduplicated version, which decrements the
exponents of its prime factors.
.t Duplicate the result and decrement it. This value becomes 0 once we
reach a result of 1, which is when we want to terminate the loop.
$K Jump back to the beginning of the loop if the previous value wasn't 0.
q Retrieve the tape head's position, i.e. the number of steps we've taken
through the above loop.
print()
。另外,我无法按原样在TIO上运行代码,我认为它可以在该语言不可用的其他版本上运行?这在TIO上运行良好: print(maximum(collect(values(factor(parse(BigInt,readline()))))))
print()
之所以需要,是因为答案必须是完整的程序(显示输出)或函数(返回输出)。否则,您的解决方案就可以了。看来您可以这样保存一些字节(并避免打印):f(x)=maximum(collect(values(factor(x))))
-4个字节感谢H.PWiz。
lambda n:max(a*(n%k**a<1)for a in range(n)for k in range(2,-~n))
H.PWiz的Haskell答案端口。我之所以仅分享这些内容,是因为我能够理解这段Haskell代码并进行翻译,对此我感到很自豪。:P
range(1,n)
不行?
range(1, n)
产生[1,n)中的所有整数。
a
(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
(我不确定在什么上构成一个完整的Racket解决方案是否达成共识,因此我将采用纯函数才重要的Mathematica约定。)
factorize
给人的分解成对列表:(factorize 108)
给'((2 2) (3 3))
。一对的第二个元素由给出cadr
,表示car
(列表的头部)与cdr
(列表的尾部)的简写。
我觉得很愚蠢,(cadr (argmax cadr list))
无法找到第二个元素的最大值,但是max
对列表(max (map cadr list))
不起作用:没有做我们想要的事情。我不是球拍专家,所以也许有一种更好的标准方法。
(λ(n)(define(p d m)(if(=(gcd m d)d)(+(p d(/ m d))1)0))(p(argmax(λ(d)(p d n))(range 2 n))n))
替代版本不会导入factorize
,而是或多或少从头开始执行所有操作。该功能(p m d)
发现的最高权力d
划分m
,然后我们随便找的最高值(p n d)
对d
之间2
和n
。(我们不需要将此限制为素数,因为不会有比素数更好的复合功效。)
max
解决方案是,(apply max (map cadr list)
但(cadr (argmax cadr list))
不幸的是要短一些。
{⌈/+/¨v∘=¨v←π⍵}
测试:
f←{⌈/+/¨v∘=¨v←π⍵}
f¨2..12
1 1 2 1 1 1 3 2 1 1 2
f¨144 200 500 1024 3257832488
4 3 3 10 3
评论:
{⌈/+/¨v∘=¨v←π⍵}
v←π⍵ π12 return 2 2 3; assign to v the array of prime divisors of argument ⍵
v∘=¨ for each element of v, build one binary array, show with 1 where are in v array, else puts 0
return one big array I call B, where each element is the binary array above
+/¨ sum each binary element array of B
⌈/ get the max of all element of B (that should be the max exponet)