求n以下所有数字的总和,这些数字是某些数字的倍数
31
几乎等同于欧拉计划的第一个问题:
如果我们列出所有低于10的自然数,它们是3或5的倍数,则得到3、5、6和9。这些倍数的总和为23。
找出1000以下3或5的所有倍数的总和。
挑战:
给定一个正整数N和一组至少一个正整数的A,输出所有的正整数的总和小于N那些中的至少一个构件的倍数A。
例如,对于Project Euler情况,输入为:
1000
3
5
测试用例:
Input : 50, [2]
Output: 600
Input : 10, [3, 5]
Output: 23
Input : 28, [4, 2]
Output: 182
Input : 19, [7, 5]
Output: 51
Input : 50, [2, 3, 5]
Output: 857
4
1)我们是否计算两个数字的倍数?2)我们只能得到另外两个数字吗?或任何金额说一或三?
3
你能给出一些测试用例吗?显然不要将答案发布到PE上,但是其他示例呢?
1
@WheatWizard:单词“或”表示每个数字最多只能计数一次。我同意,这个问题需要弄清楚必须支持多少个“数字以检查参数的倍数”。就是两个?一个或多个?零或更多?
1
我们可以接受等于或低于10的数字,还是接受9而不是10?
“并且至少有一个正整数A的集合”该集合有多大?
Answers:
13
果冻,6个字节
ḍþṖḅTS
怎么运行的
ḍþṖḅTS Main link. Left argument: D (array). Right argument: n (integer)
ḍþ Divisible table; test each k in [1, ..., n] for divisibility by all
integers d in D.
Ṗ Pop; discard the last Boolean array, which corresponds to n.
ḅ Unbase; convert the Boolean arrays of base n to integer. This yields a
non-zero value (truthy) and and only if the corresponding integer k is
divisible by at least one d in D.
T Truth; yield the array of all indices of truthy elements.
S Compute their sum.
3
当然,@ Dennis必须附带一些使您想知道您在ppcg上正在做什么的东西
8
Python,59 55字节
lambdan,l:sum(v*any(v%m<1forminl)forvinrange(n))
带有整数n和整数列表的未命名函数l。遍历一个自然数(加零)的范围,但不包括n和求和(sum(...))那些用零(v%m<1)除以列表中any整数的余数。使用乘法而不是条件式来节省3个字节。ml
8
八度,38 36 33字节
@(x,y)(1:--x)*~all(mod(1:x,y),1)'
输入为:f(10, [3;5])。如果输入可以f(9,[3;5])用于相同的测试用例,则将短2个字节。
说明:
@(x,y) % Anonymous function that takes two inputs, x and y
% x is a scalar and y is a vertical vector with the set of numbers
(1:--x)* % Pre-decrement x and create a vector 1 2 ... x-1
八度可以预先减小,因此使用1:--x代替1:x-1(两次)可以节省两个字节。
mod(a,b)给出1 2 0 1 2 0 1 2 0的mod(1:9,3)。如果第二个参数是垂直向量,它将垂直复制第一个输入,并为第二个输入参数中的每个值取模。因此,对于输入,mod(1:9, [3;5])它给出:
1 2 0 1 2 0 1 2 0
1 2 3 4 0 1 2 3 4
以~all(_,1)在这给true了其中至少有一个值为零列,false其中所有的值不为零:
~all(mod(1:x,y),1)
0 0 1 0 1 1 0 0 1
在,1需要的情况下,存在只有一个号码y。否则,它将作用于整个向量,而不是作用于数字。
将其转换为垂直矩阵并使用矩阵乘法,将为我们提供正确的答案,而无需显式求和:
哦,这很残酷:由于x和x–1之间的差异,我不得不添加2个字节,但是您必须添加4个字节,我现在领先1个字节> :)
6
JavaScript(ES6),40 39 36字节
输入:具有整数n和整数数组,a具有柯林语法(n)(a)
n=>F=a=&