diff --git a/README.rst b/README.rst index dce1c59b..10b846a4 100644 --- a/README.rst +++ b/README.rst @@ -80,12 +80,12 @@ Olivia's Project Euler Solutions | | C++14+ in: |msvc| [1]_ | | |CodeQL| |br| | | | |br| Browser [3]_ | | |Cp-lint| | +------------+----------------------------+--------+-------------------+ - | C |nbsp| # | .NET 2+ | 21 | |C#i| |br| | + | C |nbsp| # | .NET 2+ | 22 | |C#i| |br| | | | | | |Cs-Cov| |br| | | | | | |CodeQL| |br| | | | | | |C#-lint| | +------------+----------------------------+--------+-------------------+ - | Java | Java 8+ in Corretto, |br| | 21 | |Javai| |br| | + | Java | Java 8+ in Corretto, |br| | 22 | |Javai| |br| | | | Dragonwell, Liberica, |br| | | |Ja-Cov| |br| | | | Microsoft, Oracle, |br| | | |CodeQL| |br| | | | Semeru, Temurin, & Zulu | | |Java-lint| | diff --git a/csharp/Euler.Test/test.cs b/csharp/Euler.Test/test.cs index 5d17f948..959c34ca 100644 --- a/csharp/Euler.Test/test.cs +++ b/csharp/Euler.Test/test.cs @@ -16,6 +16,7 @@ public static IEnumerable Data() yield return new object[] { typeof(p0002), false, Utilities.GetAnswer(2) }; yield return new object[] { typeof(p0003), false, Utilities.GetAnswer(3) }; yield return new object[] { typeof(p0004), false, Utilities.GetAnswer(4) }; + yield return new object[] { typeof(p0005), false, Utilities.GetAnswer(5) }; yield return new object[] { typeof(p0006), false, Utilities.GetAnswer(6) }; yield return new object[] { typeof(p0007), false, Utilities.GetAnswer(7) }; yield return new object[] { typeof(p0008), false, Utilities.GetAnswer(8) }; diff --git a/csharp/Euler/p0003.cs b/csharp/Euler/p0003.cs index 8b3dc36a..040d11c8 100644 --- a/csharp/Euler/p0003.cs +++ b/csharp/Euler/p0003.cs @@ -18,7 +18,7 @@ public class p0003 : IEuler { public object Answer() { - return (short)Enumerable.Max(Prime.PrimeFactors(600851475143)); + return (short)Prime.PrimeFactors(600851475143).Max(); } } } diff --git a/csharp/Euler/p0005.cs b/csharp/Euler/p0005.cs new file mode 100644 index 00000000..78a2edd4 --- /dev/null +++ b/csharp/Euler/p0005.cs @@ -0,0 +1,34 @@ +/* +Project Euler Problem 5 + +Problem: + +2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. + +What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? +*/ +using System; + +namespace Euler +{ + public class p0005 : IEuler + { + public object Answer() + { + int answer = 1; + byte[] factorTracker = new byte[20], localFactorTracker = new byte[20]; + for (byte i = 2; i < 21; i++) { + foreach (byte p in Prime.PrimeFactors(i)) + localFactorTracker[p]++; + for (byte j = 2; j < 20; j++) { + factorTracker[j] = Math.Max(factorTracker[j], localFactorTracker[j]); + localFactorTracker[j] = 0; + } + } + for (byte i = 2; i < 20; i++) + for (byte j = 0; j < factorTracker[i]; j++) + answer *= i; + return answer; + } + } +} diff --git a/csharp/Euler/p0007.cs b/csharp/Euler/p0007.cs index fdfd0a88..fcb51cfd 100644 --- a/csharp/Euler/p0007.cs +++ b/csharp/Euler/p0007.cs @@ -16,11 +16,7 @@ public class p0007 : IEuler { public object Answer() { - int i = 0; - foreach (long p in Prime.Primes()) - if (i++ == 10000) - return (int)p; - return -1; + return Prime.Primes().ElementAt(10000); } } } diff --git a/csharp/Euler/p0010.cs b/csharp/Euler/p0010.cs index fcf4dcd8..eb181221 100644 --- a/csharp/Euler/p0010.cs +++ b/csharp/Euler/p0010.cs @@ -15,7 +15,7 @@ public class p0010 : IEuler { public object Answer() { - return Enumerable.Sum(Prime.Primes(2000000)); + return Prime.Primes(2000000).Sum(); } } } diff --git a/csharp/README.rst b/csharp/README.rst index dda48701..a298ad56 100644 --- a/csharp/README.rst +++ b/csharp/README.rst @@ -86,6 +86,7 @@ Problems Solved - ☒ `2 <./Euler/p0002.cs>`__ - ☒ `3 <./Euler/p0003.cs>`__ - ☒ `4 <./Euler/p0004.cs>`__ +- ☒ `5 <./Euler/p0005.cs>`__ - ☒ `6 <./Euler/p0006.cs>`__ - ☒ `7 <./Euler/p0007.cs>`__ - ☒ `8 <./Euler/p0008.cs>`__ diff --git a/docs/index.rst b/docs/index.rst index 36a1ec8d..340fe718 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -85,7 +85,7 @@ Problems Solved +-----------+-----------+------------+------------+------------+------------+------------+------------+------------+ |:prob:`004`|:c-d:`0004`|:cp-d:`0004`|:cs-d:`0004`|:ja-d:`0004`|:js-d:`0004`|:lu-d:`0004`|:py-d:`0004`|:rs-d:`0004`| +-----------+-----------+------------+------------+------------+------------+------------+------------+------------+ - |:prob:`005`|:c-d:`0005`|:cp-d:`0005`| | |:js-d:`0005`| |:py-d:`0005`|:rs-d:`0005`| + |:prob:`005`|:c-d:`0005`|:cp-d:`0005`|:cs-d:`0005`|:ja-d:`0005`|:js-d:`0005`| |:py-d:`0005`|:rs-d:`0005`| +-----------+-----------+------------+------------+------------+------------+------------+------------+------------+ |:prob:`006`|:c-d:`0006`|:cp-d:`0006`|:cs-d:`0006`|:ja-d:`0006`|:js-d:`0006`|:lu-d:`0006`|:py-d:`0006`|:rs-d:`0006`| +-----------+-----------+------------+------------+------------+------------+------------+------------+------------+ diff --git a/docs/src/csharp/p0005.rst b/docs/src/csharp/p0005.rst new file mode 100644 index 00000000..debc9404 --- /dev/null +++ b/docs/src/csharp/p0005.rst @@ -0,0 +1,18 @@ +C# Implementation of Problem 5 +============================== + +View source code :source:`csharp/Euler/p0005.cs` + +.. csharp:namespace:: Euler + +.. csharp:class:: p0005 + + .. csharp:inherits:: Euler.IEuler + + .. csharp:method:: object Answer() + +.. literalinclude:: ../../../csharp/Euler/p0005.cs + :language: csharp + :linenos: + +.. tags:: csharp-iterator, divisibility, factorization, prime-number diff --git a/docs/src/java/p0005.rst b/docs/src/java/p0005.rst new file mode 100644 index 00000000..42092591 --- /dev/null +++ b/docs/src/java/p0005.rst @@ -0,0 +1,24 @@ +Java Implementation of Problem 5 +================================ + +View source code :source:`java/src/main/java/euler/p0005.java` + +Includes +-------- + +- `Primes.java <./lib/primes.html>`_ + +Problem Solution +---------------- + +.. java:type:: public class p0005 implements IEuler + + .. java:method:: Object answer() + + :return: The answer to Project Euler problem 5 + +.. literalinclude:: ../../../java/src/main/java/euler/p0005.java + :language: java + :linenos: + +.. tags:: java-iterator, divisibility, factorization, prime-number diff --git a/java/README.rst b/java/README.rst index fbdd8533..c9af3302 100644 --- a/java/README.rst +++ b/java/README.rst @@ -85,6 +85,7 @@ Problems Solved - ☒ `2 <./src/main/java/p0002.java>`__ - ☒ `3 <./src/main/java/p0003.java>`__ - ☒ `4 <./src/main/java/p0004.java>`__ +- ☒ `5 <./src/main/java/p0005.java>`__ - ☒ `6 <./src/main/java/p0006.java>`__ - ☒ `7 <./src/main/java/p0007.java>`__ - ☒ `8 <./src/main/java/p0008.java>`__ diff --git a/java/src/main/java/euler/p0005.java b/java/src/main/java/euler/p0005.java new file mode 100644 index 00000000..f3fe75c6 --- /dev/null +++ b/java/src/main/java/euler/p0005.java @@ -0,0 +1,33 @@ +/* +Project Euler Problem 5 + +Problem: + +2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. + +What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? +*/ +package euler; + +import euler.lib.Primes; + +public class p0005 implements IEuler { + @Override + public Object answer() { + int answer = 1; + int[] factorTracker = new int[20], localFactorTracker = new int[20]; + for (int i = 2; i < 21; i++) { + Primes.primeFactors(i) + .mapToInt(Long::intValue) + .forEach(p -> localFactorTracker[p]++); + for (int j = 2; j < 20; j++) { + factorTracker[j] = Math.max(factorTracker[j], localFactorTracker[j]); + localFactorTracker[j] = 0; + } + } + for (int i = 2; i < 20; i++) + for (int j = 0; j < factorTracker[i]; j++) + answer *= i; + return answer; + } +} \ No newline at end of file diff --git a/java/src/test/java/EulerTest.java b/java/src/test/java/EulerTest.java index b2c6e68d..797c661e 100644 --- a/java/src/test/java/EulerTest.java +++ b/java/src/test/java/EulerTest.java @@ -19,6 +19,7 @@ static Stream data() throws IOException { new Object[] { p0002.class, false, Utilities.getAnswer(2) }, new Object[] { p0003.class, false, Utilities.getAnswer(3) }, new Object[] { p0004.class, false, Utilities.getAnswer(4) }, + new Object[] { p0005.class, false, Utilities.getAnswer(5) }, new Object[] { p0006.class, false, Utilities.getAnswer(6) }, new Object[] { p0007.class, false, Utilities.getAnswer(7) }, new Object[] { p0008.class, false, Utilities.getAnswer(8) },