From 2f2e94424904011b9c96ec405f3781de0fce4a40 Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Wed, 30 Sep 2020 20:23:07 +0530 Subject: [PATCH 1/3] Create Problem12.java Added solution for problem 12 of Project Euler --- ProjectEuler/Problem12.java | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 ProjectEuler/Problem12.java diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java new file mode 100644 index 000000000..d85721d76 --- /dev/null +++ b/ProjectEuler/Problem12.java @@ -0,0 +1,63 @@ +/* + The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. + The first ten terms would be: + + 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + + Let us list the factors of the first seven triangle numbers: + + 1: 1 + 3: 1,3 + 6: 1,2,3,6 + 10: 1,2,5,10 + 15: 1,3,5,15 + 21: 1,3,7,21 + 28: 1,2,4,7,14,28 + We can see that 28 is the first triangle number to have over five divisors. + + What is the value of the first triangle number to have over five hundred divisors? +*/ + +public class Problem_12_Highly_Divisible_Triangular_Number { + + /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ + public static int triangleNumber(int n) { + int sum = 0; + for (int i = 0; i <= n; i++) + sum += i; + return sum; + } + + public static void main(String[] args) { + + long start = System.currentTimeMillis(); // start the stopwatch + + int j = 0; // j represents the jth triangle number + int n = 0; // n represents the triangle number corresponding to j + int numberOfDivisors = 0; // number of divisors for triangle number n + + while (numberOfDivisors <= 500) { + + // resets numberOfDivisors because it's now checking a new triangle number + // and also sets n to be the next triangle number + numberOfDivisors = 0; + j++; + n = triangleNumber(j); + + // for every number from 1 to the square root of this triangle number, + // count the number of divisors + for (int i = 1; i <= Math.sqrt(n); i++) + if (n % i == 0) + numberOfDivisors++; + + // 1 to the square root of the number holds exactly half of the divisors + // so multiply it by 2 to include the other corresponding half + numberOfDivisors *= 2; + } + + long finish = System.currentTimeMillis(); // stop the stopwatch + + System.out.println(n); + System.out.println("Time taken: " + (finish - start) + " milliseconds"); + } +} From 064d941722674cd023d3e8e5f59823fbc0d691b3 Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Tue, 6 Oct 2020 07:34:52 +0530 Subject: [PATCH 2/3] Update Problem12.java --- ProjectEuler/Problem12.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java index d85721d76..72e1b5b71 100644 --- a/ProjectEuler/Problem12.java +++ b/ProjectEuler/Problem12.java @@ -18,7 +18,7 @@ What is the value of the first triangle number to have over five hundred divisors? */ -public class Problem_12_Highly_Divisible_Triangular_Number { +public class Problem_12 { /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ public static int triangleNumber(int n) { From 8ad87ce9d3c09b8d2e3382e58b6e3aa0651c8e06 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 6 Oct 2020 14:58:38 +0800 Subject: [PATCH 3/3] reformat --- ProjectEuler/Problem12.java | 69 +++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java index 72e1b5b71..89ea3e0ac 100644 --- a/ProjectEuler/Problem12.java +++ b/ProjectEuler/Problem12.java @@ -1,24 +1,34 @@ -/* - The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. - The first ten terms would be: +package ProjectEuler; +/** + * The sequence of triangle numbers is generated by adding the natural numbers. + * So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. + * The first ten terms would be: + *

+ * 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + *

+ * Let us list the factors of the first seven triangle numbers: + *

+ * 1: 1 + * 3: 1,3 + * 6: 1,2,3,6 + * 10: 1,2,5,10 + * 15: 1,3,5,15 + * 21: 1,3,7,21 + * 28: 1,2,4,7,14,28 + * We can see that 28 is the first triangle number to have over five divisors. + *

+ * What is the value of the first triangle number to have over five hundred divisors? + *

+ * link: https://projecteuler.net/problem=12 + */ +public class Problem12 { - 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - - Let us list the factors of the first seven triangle numbers: - - 1: 1 - 3: 1,3 - 6: 1,2,3,6 - 10: 1,2,5,10 - 15: 1,3,5,15 - 21: 1,3,7,21 - 28: 1,2,4,7,14,28 - We can see that 28 is the first triangle number to have over five divisors. - - What is the value of the first triangle number to have over five hundred divisors? -*/ - -public class Problem_12 { + /** + * Driver Code + */ + public static void main(String[] args) { + assert solution1(500) == 76576500; + } /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ public static int triangleNumber(int n) { @@ -28,36 +38,29 @@ public class Problem_12 { return sum; } - public static void main(String[] args) { - - long start = System.currentTimeMillis(); // start the stopwatch - + public static int solution1(int number) { int j = 0; // j represents the jth triangle number int n = 0; // n represents the triangle number corresponding to j int numberOfDivisors = 0; // number of divisors for triangle number n - - while (numberOfDivisors <= 500) { + + while (numberOfDivisors <= number) { // resets numberOfDivisors because it's now checking a new triangle number // and also sets n to be the next triangle number numberOfDivisors = 0; j++; n = triangleNumber(j); - + // for every number from 1 to the square root of this triangle number, // count the number of divisors for (int i = 1; i <= Math.sqrt(n); i++) if (n % i == 0) numberOfDivisors++; - + // 1 to the square root of the number holds exactly half of the divisors // so multiply it by 2 to include the other corresponding half numberOfDivisors *= 2; } - - long finish = System.currentTimeMillis(); // stop the stopwatch - - System.out.println(n); - System.out.println("Time taken: " + (finish - start) + " milliseconds"); + return n; } }