我想弄清楚Q语言的基础知识。我正在尝试一个示例程序,让我们说一个给定的数字,我可以找到3和5的所有倍数的总和?
如果输入是10和:23
我试图用直接和总和的方式思考,但是到现在为止还是无济于事。
答案 0 :(得分:2)
q)sum where (or/) 0=(til 10) mod/: 3 5
23
答案 1 :(得分:0)
q)sum where 0=min(til 10)mod/:3 5
23
在步骤中,我们只需将我们的mod应用于5和3而不是单独执行。
q)(til 10)mod 3
0 1 2 0 1 2 0 1 2 0
q)(til 10)mod 5
0 1 2 3 4 0 1 2 3 4
q)(til 10)mod/:3 5
0 1 2 0 1 2 0 1 2 0
0 1 2 3 4 0 1 2 3 4
q)
通过这个结果,我们有2个列表; ((直到10)mod 3;(直到10)mod 5)。如果我们去了每个的索引3,我们将得到(0; 3)。这意味着我们的数字可以被3整除但不能被5整除。我们只关心它是否可以被它整除,所以我们可以采用最小值。
q)min(til 10)mod/:3 5
0 1 2 0 1 0 0 1 2 0
q)
接下来,我们只需找到mod为零的索引;
q)where 0=min(til 10)mod/:3 5
0 3 5 6 9
q)
由于这些指数与这些指数的实际值具有相同的值,我们可以将它们相加。给;
q)sum where 0=min(til 10)mod/:3 5
23
q)
如果那些指数的指数和价值不相等,那么我们需要索引到原始列表并对这些值求和。