diff --git a/problems_1_to_3.go b/problems_1_to_3.go new file mode 100644 index 0000000..99f3792 --- /dev/null +++ b/problems_1_to_3.go @@ -0,0 +1,89 @@ +package euler + +// SumMultiples finds the sum of all the multiples of 3 or 5 below 1000 +func SumMultiples() int { + result := 0 + + for i := range [1000]int{} { + if i%3 == 0 || i%5 == 0 { + result += i + } + } + + return result +} + +// EvenFibonacci finds the sum of the even-valued terms of a Fibonacci sequence, +// considering only the terms whose values do not exceed max +func EvenFibonacci(max int) int { + result := 0 + first, second := 0, 1 + + for second <= max { + first, second = second, first+second + + if second%2 == 0 { + result += second + } + } + + return result +} + +// FindLargestPrimeFactor finds the largest prime factor of the number x +func FindLargestPrimeFactor(x int) int { + + isPrime := func(n int) bool { + + // Check if n=1 or n=0 + if n <= 1 { + return false + } + + // Check if n=2 or n=3 + if n == 2 || n == 3 { + return true + } + + // Check whether n is divisible by 2 or 3 + if n%2 == 0 || n%3 == 0 { + return false + } + + // Check from 5 to square root of n + // Iterate i by (i+6) + for i := 5; i*i <= n; i = i + 6 { + if n%i == 0 || n%(i+2) == 0 { + return false + } + } + + return true + } + + if x == 2 || x == 3 { + return x + } + + for x%2 == 0 { + x /= 2 + } + + for x%3 == 0 { + x /= 3 + } + + largest := 0 + for i := 5; i <= x; i = i + 1 { + if x%i == 0 { + for x%i == 0 { + x /= i + } + + if isPrime(i) { + largest = i + } + } + } + return largest +} diff --git a/problems_1_to_3_test.go b/problems_1_to_3_test.go new file mode 100644 index 0000000..c3050cc --- /dev/null +++ b/problems_1_to_3_test.go @@ -0,0 +1,19 @@ +package euler + +import ( + "fmt" + "testing" +) + +func TestSumMultiples(t *testing.T) { + fmt.Println(SumMultiples()) +} + +func TestEvenFibonacci(t *testing.T) { + fmt.Println(EvenFibonacci(4_000_000)) +} + +func TestFindLargestPrimeFactor(t *testing.T) { + fmt.Println(FindLargestPrimeFactor(13195)) + fmt.Println(FindLargestPrimeFactor(600851475143)) +}