Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Problem111 {
- def main(args: Array[String]) {
- println(sumOfSFunctions(10))
- }
- def countRepeatedDigits(number: Int, digit: Int): Int = number.toString.count(_ == (digit + 48).toChar)
- def mFunction(primeLength: Int, digit: Int) = getMapOfPrimesWithMaxDigitsNumber(primeLength, digit)._1
- def nFunction(primeLength: Int, digit: Int): Int = getMapOfPrimesWithMaxDigitsNumber(primeLength, digit)._2.size
- def sFunction(primeLength: Int, digit: Int): BigInt = getMapOfPrimesWithMaxDigitsNumber(primeLength, digit)._2.sum
- def getMapOfPrimesWithMaxDigitsNumber(primeLength: Int, digit: Int): (Int, List[Int]) = {
- getListOfPrimesWithLength(primeLength).groupBy(x => countRepeatedDigits(x, digit)).maxBy(_._1)
- }
- def sumOfSFunctions(primeLength: Int): BigInt = (0 to 9).map(x => sFunction(primeLength, x)).sum
- def getListOfPrimesWithLength(length: Int): List[Int] = sieveOfEratosthenes(math.pow(10, length).toInt).filter(x => x >= math.pow(10, length - 1)).toList
- def sieveOfEratosthenes(nTo: Int) = {
- val primes = collection.mutable.BitSet.empty.par ++ (2 to nTo)
- for {
- candidate <- 2 to Math.sqrt(nTo).toInt
- if primes contains candidate
- } primes --= candidate * candidate to nTo by candidate
- primes
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement