Project Euler/56
From charlesreid1
Problem Statement
Given numbers of the form , where a, b <= 100, we are asked to find the values of a and b with the maximum digital sum.
Link: https://projecteuler.net/problem=56
Solution Technique
The key to this problem is to do a bit of back-of-the-envelope estimation. We have about 100 x 100 = 10,000 numbers to explore, and each one will result in a number up to , or 101 digits.
The computer will only be doing multiplication, so this task can actually be done in a reasonable amount of time.
Code
Driver:
int maxSum = 0; int maxA = 0; int maxB = 0; for(int a=1; a<100; a++) { for(int b=1; b<100; b++) { BigInteger x = new BigInteger( Integer.toString(a) ); x = x.pow(b); int sum = computeDigitalSum(x); if(sum>maxSum) { maxSum = sum; maxA = a; maxB = b; } } } System.out.println(maxSum);
The utility method to compute the digital sum:
public static int computeDigitalSum(BigInteger n) { char[] s = n.toString().toCharArray(); int runningSum = 0; for(int i=0; i<s.length; i++) { int digit = Character.digit(s[i],10); runningSum += digit; } return runningSum; }
Link: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/056/BigNums.java
Flags
Project Euler project euler notes
Round 1: Problems 1-20 Problem 1 · Problem 2 · Problem 3 · Problem 4 · Problem 5 · Problem 6 · Problem 7 · Problem 8 · Problem 9 · Problem 10 Problem 11 · Problem 12 · Problem 13 · Problem 14 · Problem 15 · Problem 16 · Problem 17 · Problem 18 · Problem 19 · Problem 20 Round 2: Problems 50-70 Problem 51 · Problem 52 · Problem 53 · Problem 54 · Problem 55 · Problem 56 · Problem 57 · Problem 58 · ... · Problem 61 · Problem 62 · Problem 63 · Problem 64 · Problem 65 · Problem 66 · Problem 67 Round 3: Problems 100-110 Problem 100 · Problem 101 · Problem 102 Round 4: Problems 500-510 Problem 500 · Problem 501 * · Problem 502 * Round 5: Problems 150-160 Round 6: Problems 250-260 Round 7: Problems 170-180
|