首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala正在添加(.)到.flatten和.max,从而返回.flatten(.).max(.)

Scala正在添加(.)到.flatten和.max,从而返回.flatten(.).max(.)
EN

Stack Overflow用户
提问于 2021-07-14 23:52:54
回答 1查看 70关注 0票数 1

我从Python/R (以及一些有限的C#和Java)来到Scala,并且正在使用Project来练习我的代码编写。基本上,如果需要,我可以用Python快速编写解决方案,然后将其转换为Scala。

然而,我坚持以下几点:

13195的素因子为5、7、13和29。数字600851475143的最大素因子是什么?

下面的代码试图应用Pollard的Rho算法来找到最大因子。不幸的是,每次我写factorList.max时,它都会自动追加(.)直到马克斯的尽头。我很感谢你的反馈。一定要撕掉我的代码。永远愿意学习!

代码语言:javascript
复制
def gcd(a: Long, b: Long): Long =
    if (b == 0) a else gcd(b, a % b)

  def compositeFinder(composite : Long , iterLimit : Int) : Int =
    {
/*      The prime factors of 13195 are 5, 7, 13 and 29.
      What is the largest prime factor of the number 600851475143 ?*/

      var x = 2 : Long
      var y = 2 : Long
      var d = 1 : Long

      var factorList = ListBuffer()
      var iteration = 0
      while(iteration < iterLimit){
        x = (x*x + 1)%composite
        y = (y*y + 1)%composite
        d = gcd((x-y).abs,composite)

        if(d != 1 && d != composite && !factorList.contains(d)){
          factorList += d
        }
        iteration += 1
      }

      return factorList.flatten(...).max(...)
EN

回答 1

Stack Overflow用户

发布于 2021-07-15 06:24:30

IntelliJ编辑器将插入一个(...),以指示编译器无法找到编译指定方法调用所需的“管道”(曾经是insert,现在是givens)。

你的密码怎么了?

首先,编译器无法查看ListBuffer()将保存的元素类型,因此它被指定为默认元素类型,这不是您想要的。这将解决以下问题:

代码语言:javascript
复制
val factorList = ListBuffer[Long]()

注意:喜欢val而不是var

接下来,由于factorListLong元素的ListBuffer,所以flatten没有任何意义。已经很平了。

代码语言:javascript
复制
factorList.max

注意:不要使用return。它会做一些有趣的事情。躲起来就行了。

这将返回一个Long,但是compositeFinder()被定义为返回一个Int。修复它,所有的东西都会编译。

但更大的问题是,您正在用Scala语言编写C代码。学习一门新语言不仅仅是学习语法。在最好的情况下,学习一种新语言的习语会导致学习新的思维方式和解决问题的方法。

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

https://stackoverflow.com/questions/68386276

复制
相关文章

相似问题

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