首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: MethodError:无方法匹配&(:Int64 64,::Vector{Int64})

错误: MethodError:无方法匹配&(:Int64 64,::Vector{Int64})
EN

Stack Overflow用户
提问于 2022-08-01 02:08:33
回答 1查看 429关注 0票数 0

我正在编写GCD程序,但每次尝试时都会收到以下错误消息:

代码语言:javascript
复制
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行有一个类型问题,但我不明白为什么。下面是节目:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-08-01 03:45:00

对于主要问题,出现此错误是因为&不像您所假设的那样用于分离if下的不同语句。&是一个“按位”运算符,即用于对一个数字的单个二进制数字进行操作。;是用于分隔不同后续语句的操作符,但是仅仅使用新行通常对可读性更好。

代码语言:javascript
复制
if mod(m,i) == 0
  m = m÷i
  push!(a,i) 
end

在粘贴代码时还有其他几个问题,包括语法问题和逻辑问题。

如果您的目标仅仅是找到GCD,请使用内置的gcd函数,如@jling建议的那样。否则,如果您希望为学习目的创建自己的GCD函数,我建议先从小开始,尝试REPL中的操作符以及它们是如何组合工作的,并在代码中实现之前先手工计算几个示例的算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73188244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档