### Microsoft Azure Notebooks - Live code - F#, R, and Python

I was exploring Jupyter notebooks , that combines live code, markdown and data, through Microsoft's implementation, known as MS Azure Notebooks , putting together a small library of R and F# notebooks . As Microsoft's FAQ for the service describes it as : ...a multi-lingual REPL on steroids. This is a free service that provides Jupyter notebooks along with supporting packages for R, Python and F# as a service. This means you can just login and get going since no installation/setup is necessary. Typical usage includes schools/instruction, giving webinars, learning languages, sharing ideas, etc. Feel free to clone and comment... In R Azure Workbook for R - Memoisation and Vectorization Charting Correlation Matrices in R In F# Charnownes Constant in FSharp.ipynb Project Euler - Problems 18 and 67 - FSharp using Dynamic Programming

### Consecutive Prime Sum (Project Euler - Problem 50)

Problem

The prime 41, can be written as the sum of six consecutive primes:

41 = 2 + 3 + 5 + 7 + 11 + 13

This is the longest sum of consecutive primes that adds to a prime below one-hundred.

The longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953.

Which prime, below one-million, can be written as the sum of the most consecutive primes?

Note

Some libraries used in this code are F# modules I use, but have also published as a Nuget library, such as EulerLib.GetPrimes() and EulerLib.isPrime(). You need to reference the NuGetLibrary to use this code as is.

Solution

`````` #load "Stat.fs"
open Stat
open Print
open EulerLib
open System

let rec FindLongestPrimeSequenceSum
(primeList:list)
(nextItem:int)
lessThanValue
(primeArray:list)
bestPrime
(correctArray:list) =
if List.sum(primeArray) + primeList.[nextItem] >= lessThanValue then
(bestPrime, correctArray.Length)
else
let newArray = List.append primeArray [primeList.[nextItem]]
let nextCounter = nextItem + 1
let testNum = List.sum newArray
if EulerLib.IsPrime(testNum) then
FindLongestPrimeSequenceSum
primeList
nextCounter
lessThanValue
newArray
testNum
newArray
else
FindLongestPrimeSequenceSum
primeList
nextCounter
lessThanValue
newArray
bestPrime
correctArray

let primeStart2 = Seq.toList(EulerLib.GetPrimes(1000000))
let primeStart3 = [for i = 1 to primeStart2.Length - 1 do yield primeStart2.[i] ]
let primeStart4 = [for i = 1 to primeStart3.Length - 1 do yield primeStart3.[i] ]
let primeStart5 = [for i = 1 to primeStart4.Length - 1 do yield primeStart4.[i] ]
let primeStart6 = [for i = 1 to primeStart5.Length - 1 do yield primeStart5.[i] ]

let result2 = FindLongestPrimeSequenceSum primeStart2 0 1000000 [] 0 []
let result3 = FindLongestPrimeSequenceSum primeStart3 0 1000000 [] 0 []
let result4 = FindLongestPrimeSequenceSum primeStart4 0 1000000 [] 0 []
let result5 = FindLongestPrimeSequenceSum primeStart5 0 1000000 [] 0 []
let result6 = FindLongestPrimeSequenceSum primeStart6 0 1000000 [] 0 []

``````