我从Python/R (以及一些有限的C#和Java)来到Scala,并且正在使用Project来练习我的代码编写。基本上,如果需要,我可以用Python快速编写解决方案,然后将其转换为Scala。
然而,我坚持以下几点:
13195的素因子为5、7、13和29。数字600851475143的最大素因子是什么?
下面的代码试图应用Pollard的Rho算法来找到最大因子。不幸的是,每次我写factorList.max时,它都会自动追加(.)直到马克斯的尽头。我很感谢你的反馈。一定要撕掉我的代码。永远愿意学习!
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(...)发布于 2021-07-15 06:24:30
IntelliJ编辑器将插入一个(...),以指示编译器无法找到编译指定方法调用所需的“管道”(曾经是insert,现在是givens)。
你的密码怎么了?
首先,编译器无法查看ListBuffer()将保存的元素类型,因此它被指定为默认元素类型,这不是您想要的。这将解决以下问题:
val factorList = ListBuffer[Long]()注意:喜欢val而不是var。
接下来,由于factorList是Long元素的ListBuffer,所以flatten没有任何意义。已经很平了。
factorList.max注意:不要使用return。它会做一些有趣的事情。躲起来就行了。
这将返回一个Long,但是compositeFinder()被定义为返回一个Int。修复它,所有的东西都会编译。
但更大的问题是,您正在用Scala语言编写C代码。学习一门新语言不仅仅是学习语法。在最好的情况下,学习一种新语言的习语会导致学习新的思维方式和解决问题的方法。
https://stackoverflow.com/questions/68386276
复制相似问题