mirror of
https://bitbucket.org/Mattrixwv/projecteulerjava.git
synced 2025-12-06 17:13:58 -05:00
Updated for performance
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
//ProjectEuler/Java/Problem30.java
|
//ProjectEulerJava/src/main/java/mattrixwv/ProjectEuler/Problems/Problem30.java
|
||||||
//Matthew
|
//Matthew Ellison
|
||||||
// Created: 10-27-19
|
// Created: 10-27-19
|
||||||
//Modified: 10-27-19
|
//Modified: 06-17-20
|
||||||
//Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.
|
//Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.
|
||||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/JavaClasses
|
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/JavaClasses
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2019 Matthew Ellison
|
Copyright (C) 2020 Matthew Ellison
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Lesser General Public License as published by
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
@@ -28,11 +28,11 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
public class Problem30 extends Problem{
|
public class Problem30 extends Problem{
|
||||||
//This is the largest number that will be checked
|
//This is the largest number that will be checked
|
||||||
private static final Long TOP_NUM = 1000000L;
|
private static final long TOP_NUM = 1000000L;
|
||||||
//Starts with 2 because 0 and 1 don't count
|
//Starts with 2 because 0 and 1 don't count
|
||||||
private static final Long BOTTOM_NUM = 2L;
|
private static final long BOTTOM_NUM = 2L;
|
||||||
//This is the power that the digits are raised to
|
//This is the power that the digits are raised to
|
||||||
private static final Long POWER_RAISED = 5L;
|
private static final long POWER_RAISED = 5L;
|
||||||
//This is an ArrayList of the numbers that are the sum of the fifth power of their digits
|
//This is an ArrayList of the numbers that are the sum of the fifth power of their digits
|
||||||
private static ArrayList<Long> sumOfFifthNumbers;
|
private static ArrayList<Long> sumOfFifthNumbers;
|
||||||
|
|
||||||
@@ -40,21 +40,21 @@ public class Problem30 extends Problem{
|
|||||||
super("Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.");
|
super("Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.");
|
||||||
}
|
}
|
||||||
//Returns an ArrayList with the individual digits of the number passed to it
|
//Returns an ArrayList with the individual digits of the number passed to it
|
||||||
private ArrayList<Long> getDigits(Long num){
|
private ArrayList<Long> getDigits(long num){
|
||||||
ArrayList<Long> listOfDigits = new ArrayList<Long>(); //This ArrayList holds the individual digits of num
|
ArrayList<Long> listOfDigits = new ArrayList<Long>(); //This ArrayList holds the individual digits of num
|
||||||
//The easiest way to get the individual digits of a number is by converting it to a string
|
//The easiest way to get the individual digits of a number is by converting it to a string
|
||||||
String digits = num.toString();
|
String digits = Long.toString(num);
|
||||||
//Start with the first digit, convert it to an integer, store it in the ArrayList, and move to the next digit
|
//Start with the first digit, convert it to an integer, store it in the ArrayList, and move to the next digit
|
||||||
for(Integer cnt = 0;cnt < digits.length();++cnt){
|
for(int cnt = 0;cnt < digits.length();++cnt){
|
||||||
listOfDigits.add(Long.valueOf(digits.substring(cnt, cnt + 1)));
|
listOfDigits.add(Long.valueOf(digits.substring(cnt, cnt + 1)));
|
||||||
}
|
}
|
||||||
//Return the list of Digits
|
//Return the list of digits
|
||||||
return listOfDigits;
|
return listOfDigits;
|
||||||
}
|
}
|
||||||
public Long getSumOfList(){
|
private long getSumOfList(){
|
||||||
Long sum = 0L; //Start the sum at 0 so you can add to it
|
long sum = 0L; //Start the sum at 0 so you can add to it
|
||||||
//Add every number in the ArrayList to the sum
|
//Add every number in the ArrayList to the sum
|
||||||
for(Long num : sumOfFifthNumbers){
|
for(long num : sumOfFifthNumbers){
|
||||||
sum += num;
|
sum += num;
|
||||||
}
|
}
|
||||||
//Return the sum
|
//Return the sum
|
||||||
@@ -68,17 +68,17 @@ public class Problem30 extends Problem{
|
|||||||
timer.start();
|
timer.start();
|
||||||
|
|
||||||
//Start with the lowest number and increment until you reach the largest number
|
//Start with the lowest number and increment until you reach the largest number
|
||||||
for(Long currentNum = BOTTOM_NUM;currentNum <= TOP_NUM;++currentNum){
|
for(long currentNum = BOTTOM_NUM;currentNum <= TOP_NUM;++currentNum){
|
||||||
//Get the digits of the number
|
//Get the digits of the number
|
||||||
ArrayList<Long> digits = getDigits(currentNum);
|
ArrayList<Long> digits = getDigits(currentNum);
|
||||||
//Get the sum of the powers
|
//Get the sum of the powers
|
||||||
Long sumOfPowers = 0L;
|
long sumOfPowers = 0L;
|
||||||
for(Long num : digits){
|
for(long num : digits){
|
||||||
sumOfPowers += Math.round(Math.pow(num, POWER_RAISED));
|
sumOfPowers += Math.round(Math.pow(num, POWER_RAISED));
|
||||||
}
|
}
|
||||||
//Check if the sum of the powers is the same as the number
|
//Check if the sum of the powers is the same as the number
|
||||||
//If it is add it to the list, otherwise continue to the next number
|
//If it is add it to the list, otherwise continue to the next number
|
||||||
if(sumOfPowers.equals(currentNum)){
|
if(sumOfPowers == currentNum){
|
||||||
sumOfFifthNumbers.add(currentNum);
|
sumOfFifthNumbers.add(currentNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,5 +93,5 @@ public class Problem30 extends Problem{
|
|||||||
|
|
||||||
/* Results:
|
/* Results:
|
||||||
The sum of all the numbers that can be written as the sum of the fifth powers of their digits is 443839
|
The sum of all the numbers that can be written as the sum of the fifth powers of their digits is 443839
|
||||||
It took 307.629 milliseconds to solve this problem.
|
It took 227.085 milliseconds to solve this problem.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user