我正在编写GCD程序,但每次尝试时都会收到以下错误消息:
ERROR: MethodError: no method matching &(::Int64, ::Vector{Int64})
Closest candidates are:
&(::Any, ::Any, ::Any, ::Any...) at C:\Users\Katia\AppData\Local\Programs\Julia-1.7.3\share\julia\base\operators.jl:655
&(::T, ::T) where T<:Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8} at C:\Users\Katia\AppData\Local\Programs\Julia-1.7.3\share\julia\base\int.jl:336 &(::Integer, ::Missing) at C:\Users\Katia\AppData\Local\Programs\Julia-1.7.3\share\julia\base\missing.jl:170
...
Stacktrace:
[1] findGCD(m::Int64, M::Int64)
@ Main c:\Users\Katia\Documents\Sacha\Schlemblück\gcd test.jl:7
[2] top-level scope
@ REPL[2]:1第7行有一个类型问题,但我不明白为什么。下面是节目:
function findGCD(m,M)
a = []
b = []
for i in 2:trunc(Int64,√m)
while mod(m|M,i) == 0
if mod(m,i) == 0; m÷i & push!(a,i) end <-- line 7
if mod(M,i) == 0; M÷i & push!(b,i) end
end
end
prod(intersect(a,b))
end发布于 2022-08-01 03:45:00
对于主要问题,出现此错误是因为&不像您所假设的那样用于分离if下的不同语句。&是一个“按位”运算符,即用于对一个数字的单个二进制数字进行操作。;是用于分隔不同后续语句的操作符,但是仅仅使用新行通常对可读性更好。
if mod(m,i) == 0
m = m÷i
push!(a,i)
end在粘贴代码时还有其他几个问题,包括语法问题和逻辑问题。
如果您的目标仅仅是找到GCD,请使用内置的gcd函数,如@jling建议的那样。否则,如果您希望为学习目的创建自己的GCD函数,我建议先从小开始,尝试REPL中的操作符以及它们是如何组合工作的,并在代码中实现之前先手工计算几个示例的算法。
https://stackoverflow.com/questions/73188244
复制相似问题