如何让这个等式自行乘以?
*/-.%~.q:36
再次重复数字36。顺便说一下,这是Euler的Totient功能。
我缺乏将此倍增的最后一步。
是的,我知道他们已经在jsoftware上拥有了这个功能的代码。但我正试图分解代码并学习。
很抱歉问这么简单的问题。在谷歌上找到J的帮助真的很难。
答案 0 :(得分:2)
再次使用该值的最直接方法是再次包含该值。
*/ 36, -. % ~. q: 36
12
名称可用于该值。
*/ y, -. % ~. q: y=. 36
12
可以定义动词。该名称是本地名称。
etf=: verb : '*/ y, -. % ~. q: y'
etf 36
12
同一个动词可以用默认的形式表达。在这种形式中,参数是隐含的,而不是命名的。这里使用参数值两次的关键是在括号内创建the hook。
etfT=: */ @ ( , -. @ % @ ~. @ q: )
etfT 36
12
答案 1 :(得分:1)
y * (f y)
是
(* f) y
你有一个
的案例y f (g (y))
其中f
是二元*
,而g
是您已经拥有的函数:*/-.%~.q:
。现在,y f (g(y))
只会转换为“火车”(f g) y
(正如您在manual看到的那样)。使用Cap [:
* 来括号g
:
g =: [: */ [: -. [: % [: ~. q:
我们终于有了:
phi =: * g
phi 36
12
或
(* [: */ [: -. [: % [: ~. q:) 36
12
答案 2 :(得分:0)
好的,我想出了什么。
(* */@:-.@:%@~.@q:)36
答案 3 :(得分:0)
在我玩这个函数试图找出它的工作原理和研究之类的东西之后(我只有第二年的微积分背景),我回头看了一个关于素数函数p:
的旧标签,发现J内置了Euler的赋值函数5&p:
。