Lucas-Lehmer test: Difference between revisions

Content deleted Content added
Line 1,194: Line 1,194:
=={{header|Scala}}==
=={{header|Scala}}==
{{works with|Scala|2.9.1}}
{{works with|Scala|2.9.1}}
<lang Scala>object LLT extends App {
import Stream._

def primeSieve(s: Stream[Int]): Stream[Int] = s.head #::primeSieve(s.tail filter { _ % s.head != 0 }) //primeSieve: (s: Stream[Int])Stream[Int]
def primes = primeSieve(from(2)) //primes: Stream[Int]
def mersenne(p: Int): BigInt = (BigInt(2) pow p)-1 //mersenne: (p: Int)BigInt

val s: (BigInt,Int) => BigInt = (mp,p) => if (p==1) 4 else (((s(mp,p-1) pow 2)-2)%mp) //s: (BigInt, Int) => BigInt = <function2>

(primes takeWhile (_<2300) map {p=>(p,mersenne(p))} map {p=>if (p._1==2) (p,0) else (p,s(p._2,p._1-1))} filter {_._2==0})
.foreach {p=>println("prime M"+(p._1)._1+{if ((p._1)._1<200) ": "+(p._1)._2 else ": ("+(p._1)._2.toString.size+" digits)"})}
}</lang>
Output:
<pre style="height: 40ex; overflow: scroll">prime M2: 3
prime M3: 7
prime M5: 31
prime M7: 127
prime M13: 8191
prime M17: 131071
prime M19: 524287
prime M31: 2147483647
prime M61: 2305843009213693951
prime M89: 618970019642690137449562111
prime M107: 162259276829213363391578010288127
prime M127: 170141183460469231731687303715884105727
prime M521: (157 digits)
prime M607: (183 digits)
prime M1279: (386 digits)
prime M2203: (664 digits)
prime M2281: (687 digits)</pre>


=={{header|Scheme}}==
=={{header|Scheme}}==