【发布时间】:2021-03-09 02:13:54
【问题描述】:
特殊数字是这样的数字在素数索引上具有素数(2、3、5、7),在非素数索引上具有非素数。 (例如,15743 - 素数索引 (2, 3, 5) 具有素数 (5, 7, 3))。 能被 m 整除的 n 位特殊数有多少个。
例如,对于 n=2 和 m=2,答案将为 [12,42,62,82,92],因此为 5。
我编写了一个回溯算法来查找特殊数字的所有此类排列,然后检查这些特殊数字中的每一个是否可以被 m 整除并返回计数。这适用于 n 和 m 的小值,但问题是 n、m 值在 0-500 的范围内。
var primes = [2, 3, 5, 7]
var nonPrimes = [1, 4, 6, 8, 9]
n = 2 // number of digits
m = 2 //divisor
k = 0 //remainder
function rec(index, temp, count) {
if (temp.length >= n) {
if (Number(temp) % m === k) {
/* console.log(temp) */
count += 1
}
return count
}
if (primes.includes(index)) {
for (num1 in primes) {
temp += primes[num1];
count = rec(index + 1, temp, count)
temp = temp.slice(0, -1)
}
} else if (nonPrimes.includes(index)) {
for (num2 in nonPrimes) {
temp += nonPrimes[num2];
count = rec(index + 1, temp, count)
temp = temp.slice(0, -1)
}
}
return count
}
console.log("number of n-digit special numbers which are divisible by m with remainder k is ", rec(1, "", 0))
【问题讨论】:
-
为什么这个标签是python?
-
@DaniMesejo 搞错了,我在找算法,语言无所谓。
-
索引是从 1 开始的?为什么 25743 就是一个例子,而 2 是素数并且位于非素数索引上?
-
@trincot 已更正。是的,索引是基于 1 的..
标签: javascript algorithm math permutation primes