Skip to content

Instantly share code, notes, and snippets.

@davidgraca
Created February 2, 2017 16:48
Show Gist options
  • Select an option

  • Save davidgraca/5c1ce349112caa82dd82d0403e5874d8 to your computer and use it in GitHub Desktop.

Select an option

Save davidgraca/5c1ce349112caa82dd82d0403e5874d8 to your computer and use it in GitHub Desktop.

Revisions

  1. @dmgrok dmgrok created this gist Feb 2, 2017.
    34 changes: 34 additions & 0 deletions euler3.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,34 @@
    import scala.math

    object largestprime {

    val initNumber:Long = 600851475143L //> initNumber : Long = 600851475143

    def IsPrimeNumber(p:Long):Boolean = {
    if(p < 10){ p == 2 || p== 3 || p== 5 || p== 7}
    else{ p % 2 != 0 && p % 3 != 0 && p % 5 != 0 && p % 7 != 0 }
    } //> IsPrimeNumber: (p: Long)Boolean
    def stream(i: Long = 1): Stream[Long] = i #:: stream(i + 1)
    //> stream: (i: Long)Stream[Long]
    def GetNextPrime(startingNumber:Long) = {
    val prime = for {
    a <- stream(startingNumber + 1)
    if(IsPrimeNumber(a))
    } yield a
    prime
    } //> GetNextPrime: (startingNumber: Long)scala.collection.immutable.Stream[Long]
    //|

    var number:Long = initNumber //> number : Long = 600851475143
    var lastPrime:Long=GetNextPrime(1).head //> lastPrime : Long = 2

    while(number!=1){
    if(number % lastPrime == 0){
    number = number / lastPrime
    }
    else{
    lastPrime=GetNextPrime(lastPrime).head
    }
    }
    lastPrime //> res0: Long = 6857
    }