我是 Julia 的新手,为了好玩而编写了一些代码。我当前的项目正在创建代码来检查一个数字是否崇高。对于上下文(我想是一些琐事),一个崇高的数字 n 由两个品质定义:
12 是一个伟大的数字,我怀疑这就是我收到其大部分倍数错误消息的原因。 我的代码(如下所示 - 我是 Julia 的新手,所以要做好低效率的准备)可以像任何其他数字一样工作。
除了 36、72、144、288 之外,每个 12 的倍数都会出现 BoundsError 消息(因此是第 3 个、第 6 个、第 12 个、第 24 个,我假设之后的每个倍数都遵循该序列)。我很想知道为什么,如果有人能够提供帮助,我将非常感激。
这是代码:
function sublime(n)
ncheck = zeros(Int64, n)
k = 1
for k = 1:n
if rem(n,k) == 0
ncheck[k] = k
else
#do nothing
end
end
ncheck = filter!(x -> x != 0, ncheck)
divsum = sum(ncheck)
sumcheck = zeros(Int64, divsum)
for k = 1:(divsum-1)
if rem(divsum, k) == 0
sumcheck[k] = k
else
#do nothing
end
end
sumcheck = filter!(x -> x != 0, sumcheck)
divnum = size(ncheck,1)
lcheck = zeros(Int64, divnum)
for k = 1:(divnum-1)
if rem(divnum, k) == 0
lcheck[k] = k
else
#do nothing
end
end
lcheck = filter!(x -> x != 0, lcheck)
if sum(lcheck) == divnum & sum(sumcheck) == divsum
println("y")
else
println("n")
end
end
基本上,我正在创建一个长度为 n 且仅包含零的数组(称为“ncheck”),检查哪些数字 k < n result have a remainder of 0, updating the array to include those k, and deleting every 0.
然后我创建一个长度为“divsum”的数组“sumcheck”,表示n的除数之和。我重复上面的过程。检查余数为 0 的内容并删除数组中剩余的零。
最终的数组是“lcheck”,长度为“divnum”,表示n的除数数。与上面的过程相同,只留下余数为 0 的除数。
最后,我检查 lcheck 中的条目之和是否等于 ncheck 的长度,以及 sumcheck 中的条目之和是否等于 n 中的除数之和。如果两者都是真的,那么我手上就有一个崇高的数字,如果其中一个或两者都是假的,我就没有。
这是 12 的错误,这是一个崇高的数字:
sublime(12)
ERROR: BoundsError: attempt to access 12-element Vector{Int64} at index [14]
Stacktrace:
[1] setindex!
@ .\array.jl:969 [inlined]
[2] sublime(n::Int64)
@ Main .\REPL[49]:19
[3] top-level scope
@ REPL[78]:1
为了进行比较,以下是 24 和 48 的错误消息:
sublime(24)
ERROR: BoundsError: attempt to access 24-element Vector{Int64} at index [30]
Stacktrace:
[1] setindex!
@ .\array.jl:969 [inlined]
[2] sublime(n::Int64)
@ Main .\REPL[49]:19
[3] top-level scope
@ REPL[80]:1
sublime(48)
ERROR: BoundsError: attempt to access 48-element Vector{Int64} at index [62]
Stacktrace:
[1] setindex!
@ .\array.jl:969 [inlined]
[2] sublime(n::Int64)
@ Main .\REPL[49]:19
[3] top-level scope
@ REPL[82]:1
希望我的信息可以为解决当前问题提供一些线索!
&
是按位 and
,而 &&
是布尔值 and
。
6 & 28 # equals 4, because the bitwise and of 110 and 11100 is 100 (i.e. 4 in decimal)
6 && 28 # equals ERROR: TypeError: non-boolean (Int64) used in boolean context