ProjectEuler




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//ProjectEuler55
//How many Lychrel numbers are there below ten-thousand?

//BruteForce (improved)
import java.math.BigInteger;

public class Problem55 {

 public static void main(String[] args) {
  int count = 0;
  for (int i = 1; i <= 10000; i++) {
   if (isLychrel(i)) {
    count++;
   }
  }
  System.out.print(count);
 }

 private static boolean isLychrel(int number) {
  BigInteger num = BigInteger.valueOf(number);
  for (int i = 1; i <= 50; i++) {
   num = num.add(reverseInt(num));
   if (isPalindrome(num))
    return false;
  }
  return true;
 }

 private static BigInteger reverseInt(BigInteger num) {
  char[] rev = num.toString().toCharArray();
  return (new BigInteger(new StringBuilder(new String(rev)).reverse()
    .toString()));
 }

 private static boolean isPalindrome(BigInteger num) {
  return num.equals(reverseInt(num));
 }
}
// RESULT:249

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//ProjectEuler52
/* It can be seen that the number, 125874, and its double, 251748, contain exactly the same digits, but in a different order.
 * Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits.
 */
//Fairly Efficient
import java.util.Arrays;

public class Problem52 {

 public static void main(String[] args) {
  int x = 10;

  while (!equal(x)) {
   x++;
  }
  System.out.print(x);

 }

 public static boolean equal(int x) {

  String x1 = Integer.toString(x);
  String x2 = Integer.toString(2 * x);
  String x3 = Integer.toString(3 * x);
  String x4 = Integer.toString(4 * x);
  String x5 = Integer.toString(5 * x);
  String x6 = Integer.toString(6 * x);

  if (x1.length() == x2.length() && x2.length() == x3.length()
    && x3.length() == x4.length() && x4.length() == x5.length()
    && x5.length() == x6.length()) {

   char array1[] = x1.toCharArray();
   Arrays.sort(array1);
   x1 = new String(array1);

   char array2[] = x2.toCharArray();
   Arrays.sort(array2);
   x2 = new String(array2);

   if (!x1.equals(x2)) {
    return false;
   }

   char array3[] = x3.toCharArray();
   Arrays.sort(array3);
   x3 = new String(array3);

   if (!x2.equals(x3)) {
    return false;
   }

   char array4[] = x4.toCharArray();
   Arrays.sort(array4);
   x4 = new String(array4);

   if (!x3.equals(x4)) {
    return false;
   }

   char array5[] = x5.toCharArray();
   Arrays.sort(array5);
   x5 = new String(array5);

   if (!x4.equals(x5)) {
    return false;
   }

   char array6[] = x6.toCharArray();
   Arrays.sort(array6);
   x6 = new String(array6);

   if (!x5.equals(x6)) {
    return false;
   }

   return true;
  }
  return false;
 }

}
// RESULT:142857


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
//ProjectEuler:48 
//Efficient 
 import java.math.BigInteger;

/*
 * 
 The series, 11 + 22 + 33 + ... + 1010 = 10405071317.
 Find the last ten digits of the series, 11 + 22 + 33 + ... + 10001000.
 */
public class problem48 {

 public static void main(String[] args) {
  BigInteger sum = BigInteger.ZERO;
  for (int i = 1; i <= 1000; i++) {
   BigInteger temp = BigInteger.valueOf(i);
   sum = sum.add(temp.pow(i));
  }
  String result = sum.toString();
  System.out.print(result.subSequence(result.length() - 10,result.length()));
 }

}
//RESULT=9110846700

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//ProjectEuler:25
//What is the first term in the Fibonacci sequence to contain 1000 digits?

//Efficient
import java.math.BigInteger;

public class Problem25 {
 public static void main(String[] args) {

  BigInteger fib1 = BigInteger.ONE;
  BigInteger fib2 = BigInteger.ONE;
  BigInteger fib3 = BigInteger.ZERO;

  long count = 2;
  while (fib3.toString().length() != 1000) {

   count++;
   fib3 = fib1.add(fib2);
   fib1 = fib2;
   fib2 = fib3;

  }
  System.out.println(count);
 }

}
//RESULT:4782

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//ProjectEuler:1
//Find the sum of all the multiples of 3 or 5 below 1000.

//Brute-Force

public class Problem1 {
 public static void main(String[] args) {
  long sum = 0;
  for (int number = 1; number <1000; number++) {
   if (number % 3 == 0 || number % 5 == 0) {
    sum=sum+number;    
   }
  }
  System.out.print(sum);
 }

}

//*******************************************

//Efficient method
public class Problem1 {
 public static void main(String[] args) {
  int end=1000;
  int sum3end=3+((end/3)-1)*3;
  int sum3=(end/6)*(3+sum3end);
  int sum5end=5+((end/5)-1)*5;
  int sum5=(end/10)*(5+sum5end);
  int sum15end=15+((end/15)-1)*15;
  int sum15=(end/30)*(15+sum15end);
  System.out.print(sum3+sum5-sum15);
 }
}

//RESULT:233667

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//ProjectEuler:2
/*By considering the terms in the Fibonacci sequence whose 
  values do not exceed four million, find the sum of 
  the even-valued terms.
*/

//BruteForce
public class Problem2 {

 public static void main (String[] args){
  int sum=0;
  int a=1;
  int b=1;
  int c;
  while (a<=4000000){
   c=a+b;
   a=b;
   b=c;   
    if (b % 2==0){
     sum+=b;
    }
  }
  System.out.println(sum);  
 } 
}
//RESULT: 4613732

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//ProjectEuler:3
//What is the largest prime factor of the number 600851475143

//Fairly efficient
public class Problem3 {

 public static void main(String[] args) {
  System.out.print(getLargestPrime(600851475143L));

 }

 public static long getLargestPrime(long num) {
  long largestPrime = -1;

  for (long i = 2; i <= num; i++) {
   if (num % i == 0 && isPrime(i)) {
    largestPrime = i;
    num /= i;
   }
  }

  return largestPrime;
 }

 public static boolean isPrime(long n) {
  if (n < 2)
   return false;
  if (n == 2 || n == 3)
   return true;
  if (n % 2 == 0 || n % 3 == 0)
   return false;
  long sqrtN = (long) Math.sqrt(n) + 1;
  for (long i = 6L; i <= sqrtN; i += 6) {
   if (n % (i - 1) == 0 || n % (i + 1) == 0)
    return false;
  }
  return true;
 }
}
//RESULT=6857

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//ProjectEuler:4
/*
 A palindromic number reads the same both ways.
 The largest palindrome made from the product of
 two 2-digit numbers is 9009 = 91 � 99.
 Find the largest palindrome made from the 
 product of two 3-digit numbers.
 */

//Brute-Force (improved)
public class Problem4 {

 public static void main(String[] args) {
  int product = 0;
  int largest = 0;
  int number, digit, reverse;
  int savei = 0;
  int savej = 0;

  for (int i = 100; i < 1000; i++) {
   for (int j = 100; j < 1000; j++) {
    product = i * j;
    // check integer palindrome
    number = product;
    reverse = 0;
    while (product > 0) {
     digit = product % 10;
     reverse = reverse * 10 + digit;
     product = product / 10;
    }
    if (number == reverse) {
     if (number > largest) {
      largest = number;
      savei = i;
      savej = j;
     }
    }
   }

  }
  System.out.println(largest + " = " + savei + " X " + savej);
 }
}
// RESULT:906609 = 913 X 993

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//ProjectEuler:5
/*
 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?
 */
//BruteForce (improved)

public class Problem5 {
 public static void main(String[] args) {

  for (int number = 10000; number <= 300000000; number++) {

   for (int i = 2; i <= 20; i++) {
    if (number % i != 0) {
     break;
    }
    if (i == 20) {
     System.out.println(number);
     // System.exit(0);
    }
   }

  }

 }
}
// RESULT:232792560

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
//ProjectEuler:6
/*
 * What is the difference between the sum of the
 * squares and the square of the sums?
 */

//Constant time solution
public class Problem6 {
 public static void main(String[] args) {
  double n = 100;
  double squareOfSum, sumOfSquare;
  squareOfSum = n * ((n + 1) / 2);
  sumOfSquare = squareOfSum * (((2 * n) + 1) / 3);
  System.out.print((int) (sumOfSquare - squareOfSum));
 }
}
//RESULT:333300

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//ProjectEuler:7
//Find the 10001st prime.

//BruteForce
public class problem7 {
 public static void main(String[] args) {

  int count = 1;
  boolean prime = false;

  for (int number = 3; number <= 1000000; number = number + 2) {
   for (int i = 2; i < number; i++) {
    if (number % i == 0) {
     prime = false;
     break;

    } else {
     prime = true;
    }
   }

   if (prime) {
    count++;
    if (count == 10001) {
     System.out.println(number);
     break;
    }
   }
  }
 }
}

// **************************************************

// Improved

public class problem7 {
 public static void main(String[] args) {

  int[] primes = new int[10001];
  int primeCount = 1;
  int testNumber = 3;
  int largest = 0;
  primes[0] = 2;
  while (primeCount < 10001) {
   for (int i = 0; i < primeCount; i++) {
    if (testNumber % primes[i] == 0) {
     i = -1;
     testNumber++;
    }
   }
   primes[primeCount] = testNumber;
   if (largest < testNumber)
    largest = testNumber;
   primeCount++;
   testNumber++;

  }
  System.out.println(largest);
 }
}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//ProjectEuler:8
//Find the greatest product of five consecutive digits in the 1000-digit number.

//Pretty efficient BruteForce
public class Problem8 {
 public static void main(String[] args) {

  String inputText = "73167176531330624919225119674426574742355349194934"
    + "96983520312774506326239578318016984801869478851843"
    + "85861560789112949495459501737958331952853208805511"
    + "12540698747158523863050715693290963295227443043557"
    + "66896648950445244523161731856403098711121722383113"
    + "62229893423380308135336276614282806444486645238749"
    + "30358907296290491560440772390713810515859307960866"
    + "70172427121883998797908792274921901699720888093776"
    + "65727333001053367881220235421809751254540594752243"
    + "52584907711670556013604839586446706324415722155397"
    + "53697817977846174064955149290862569321978468622482"
    + "83972241375657056057490261407972968652414535100474"
    + "82166370484403199890008895243450658541227588666881"
    + "16427171479924442928230863465674813919123162824586"
    + "17866458359124566529476545682848912883142607690042"
    + "24219022671055626321111109370544217506941658960408"
    + "07198403850962455444362981230987879927244284909188"
    + "84580156166097919133875499200524063689912560717606"
    + "05886116467109405077541002256983155200055935729725"
    + "71636269561882670428252483600823257530420752963450";

  int inputTextSize = inputText.length();
  int product = 1;
  int highest = 0;

  for (int i = 0; i < inputTextSize - 5; i = i + 1) {
   product = (inputText.charAt(i) - 48)
     * (inputText.charAt(i + 1) - 48)
     * (inputText.charAt(i + 2) - 48)
     * (inputText.charAt(i + 3) - 48)
     * (inputText.charAt(i + 4) - 48);
   if (highest < product) {
    highest = product;
   }

  }
  System.out.println(highest);

 }
}
//RESULT:40824

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//ProjectEuler:9
/*
 A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
 a^2 + b^2 = c^2
 For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
 There exists exactly one Pythagorean triplet for which a + b + c = 1000.
 Find the product abc.
 */

//BruteForce (improved)
public class Problem9 {
 public static void main(String[] args) {
  double squaresum;
  for (double a = 1; a <= 998; a++) {
   for (double b = 1; b <= 998; b++) {
    for (double c = 1; c <= 998; c++) {
     if (a + b + c == 1000) {

      squaresum = Math.pow(a, 2) + Math.pow(b, 2);
      if (squaresum == Math.pow(c, 2)) {
       System.out.println((int) a * b * c);
       System.exit(0);

      }
     }
    }
   }
  }

 }

}
//RESULT:3.1875E7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//ProjectEuler:10
//Find the sum of all the primes below two million.

//Efficient
public class Problem10 {

 public static void main(String[] args) {
  
  long sum=0;
  for (long i=1; i<=2000000; i=i+2){
   if (isPrime(i)){
    sum=sum+i;
   }  
  } 
  System.out.print(sum);
 }
 public static boolean isPrime(long n) {
  if (n < 2)
   return false;
  if (n == 2 || n == 3)
   return true;
  if (n % 2 == 0 || n % 3 == 0)
   return false;
  long sqrtN = (long) Math.sqrt(n) + 1;
  for (long i = 6L; i <= sqrtN; i += 6) {
   if (n % (i - 1) == 0 || n % (i + 1) == 0)
    return false;
  }
  return true;
 }

}
//RESULT:142913828920

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//ProjectEuler:13

/* Work out the first ten digits of the sum of the following 
 * one-hundred 50-digit numbers.
 */

//Super Efficient
import java.math.BigInteger;

public class problem13 {
 public static void main(String[] args) {
  String inputText = 
      "37107287533902102798797998220837590246510135740250"
    + "46376937677490009712648124896970078050417018260538"
    + "74324986199524741059474233309513058123726617309629"
    + "91942213363574161572522430563301811072406154908250"
    + "23067588207539346171171980310421047513778063246676"
    + "89261670696623633820136378418383684178734361726757"
    + "28112879812849979408065481931592621691275889832738"
    + "44274228917432520321923589422876796487670272189318"
    + "47451445736001306439091167216856844588711603153276"
    + "70386486105843025439939619828917593665686757934951"
    + "62176457141856560629502157223196586755079324193331"
    + "64906352462741904929101432445813822663347944758178"
    + "92575867718337217661963751590579239728245598838407"
    + "58203565325359399008402633568948830189458628227828"
    + "80181199384826282014278194139940567587151170094390"
    + "35398664372827112653829987240784473053190104293586"
    + "86515506006295864861532075273371959191420517255829"
    + "71693888707715466499115593487603532921714970056938"
    + "54370070576826684624621495650076471787294438377604"
    + "53282654108756828443191190634694037855217779295145"
    + "36123272525000296071075082563815656710885258350721"
    + "45876576172410976447339110607218265236877223636045"
    + "17423706905851860660448207621209813287860733969412"
    + "81142660418086830619328460811191061556940512689692"
    + "51934325451728388641918047049293215058642563049483"
    + "62467221648435076201727918039944693004732956340691"
    + "15732444386908125794514089057706229429197107928209"
    + "55037687525678773091862540744969844508330393682126"
    + "18336384825330154686196124348767681297534375946515"
    + "80386287592878490201521685554828717201219257766954"
    + "78182833757993103614740356856449095527097864797581"
    + "16726320100436897842553539920931837441497806860984"
    + "48403098129077791799088218795327364475675590848030"
    + "87086987551392711854517078544161852424320693150332"
    + "59959406895756536782107074926966537676326235447210"
    + "69793950679652694742597709739166693763042633987085"
    + "41052684708299085211399427365734116182760315001271"
    + "65378607361501080857009149939512557028198746004375"
    + "35829035317434717326932123578154982629742552737307"
    + "94953759765105305946966067683156574377167401875275"
    + "88902802571733229619176668713819931811048770190271"
    + "25267680276078003013678680992525463401061632866526"
    + "36270218540497705585629946580636237993140746255962"
    + "24074486908231174977792365466257246923322810917141"
    + "91430288197103288597806669760892938638285025333403"
    + "34413065578016127815921815005561868836468420090470"
    + "23053081172816430487623791969842487255036638784583"
    + "11487696932154902810424020138335124462181441773470"
    + "63783299490636259666498587618221225225512486764533"
    + "67720186971698544312419572409913959008952310058822"
    + "95548255300263520781532296796249481641953868218774"
    + "76085327132285723110424803456124867697064507995236"
    + "37774242535411291684276865538926205024910326572967"
    + "23701913275725675285653248258265463092207058596522"
    + "29798860272258331913126375147341994889534765745501"
    + "18495701454879288984856827726077713721403798879715"
    + "38298203783031473527721580348144513491373226651381"
    + "34829543829199918180278916522431027392251122869539"
    + "40957953066405232632538044100059654939159879593635"
    + "29746152185502371307642255121183693803580388584903"
    + "41698116222072977186158236678424689157993532961922"
    + "62467957194401269043877107275048102390895523597457"
    + "23189706772547915061505504953922979530901129967519"
    + "86188088225875314529584099251203829009407770775672"
    + "11306739708304724483816533873502340845647058077308"
    + "82959174767140363198008187129011875491310547126581"
    + "97623331044818386269515456334926366572897563400500"
    + "42846280183517070527831839425882145521227251250327"
    + "55121603546981200581762165212827652751691296897789"
    + "32238195734329339946437501907836945765883352399886"
    + "75506164965184775180738168837861091527357929701337"
    + "62177842752192623401942399639168044983993173312731"
    + "32924185707147349566916674687634660915035914677504"
    + "99518671430235219628894890102423325116913619626622"
    + "73267460800591547471830798392868535206946944540724"
    + "76841822524674417161514036427982273348055556214818"
    + "97142617910342598647204516893989422179826088076852"
    + "87783646182799346313767754307809363333018982642090"
    + "10848802521674670883215120185883543223812876952786"
    + "71329612474782464538636993009049310363619763878039"
    + "62184073572399794223406235393808339651327408011116"
    + "66627891981488087797941876876144230030984490851411"
    + "60661826293682836764744779239180335110989069790714"
    + "85786944089552990653640447425576083659976645795096"
    + "66024396409905389607120198219976047599490197230297"
    + "64913982680032973156037120041377903785566085089252"
    + "16730939319872750275468906903707539413042652315011"
    + "94809377245048795150954100921645863754710598436791"
    + "78639167021187492431995700641917969777599028300699"
    + "15368713711936614952811305876380278410754449733078"
    + "40789923115535562561142322423255033685442488917353"
    + "44889911501440648020369068063960672322193204149535"
    + "41503128880339536053299340368006977710650566631954"
    + "81234880673210146739058568557934581403627822703280"
    + "82616570773948327592232845941706525094512325230608"
    + "22918802058777319719839450180888072429661980811197"
    + "77158542502016545090413245809786882778948721859617"
    + "72107838435069186155435662884062257473692284509516"
    + "20849603980134001723930671666823555245252804609722"
    + "53503534226472524250874054075591789781264330331690";

  BigInteger sum = BigInteger.ZERO;
  for (int i = 0; i < inputText.length(); i = i + 50) {
   sum = sum.add(new BigInteger(inputText.substring(i, i + 50)));
  }
  System.out.print(sum.toString().substring(0, 10));
 }

}
//RESULT:5537376230

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
//ProjectEuler:16

/*
 * What is the sum of the digits of the number 2^1000?
 */

//Pretty Efficient
import java.math.BigInteger;

public class problem16 {

 public static void main(String[] args) {
  BigInteger a = BigInteger.valueOf(2);
  String text = a.pow(1000).toString();
  long sum = 0;
  for (int i = 0; i < text.length(); i++) {
   sum = sum + text.charAt(i) - 48;
  }
  System.out.print(sum);
 }
}
//RESULT:1366

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
//ProjectEuler:15
//How many such routes are there through a 20×20 grid?
import java.math.BigInteger;

//fairly efficient
public class problem15 {
 public static void main(String[] args) {
  BigInteger fact20 = getFactorial(20, 1);
  BigInteger fact40 = fact20.multiply(getFactorial(40, 21));
  System.out.println((fact40.divide(fact20)).divide(fact20));
 }

 public static BigInteger getFactorial(int num, int loop) {
  BigInteger fact = BigInteger.ONE;
  for (int i = loop; i <= num; i++)
   fact = fact.multiply(BigInteger.valueOf(i));
  return fact;
 }
}
//RESULT:137846528820

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//ProjectEuler:20
/*
 n! means n × (n − 1) × ... × 3 × 2 × 1  * 
 * For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800, and the sum of the
 * digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.  * 
 * Find the sum of the digits in the number 100!
 */

//fairly efficient
import java.math.BigInteger;

public class Problem20 {

 public static void main(String[] args) {
  String fact = getFactorial(100).toString();
  long sum = 0;
  for (int i = 0; i < fact.length(); i++) {
   sum = sum + fact.charAt(i) - 48;
  }
  System.out.print(sum);

 }

 public static BigInteger getFactorial(int num) {
  BigInteger fact = BigInteger.ONE;
  for (int i = 1; i <= num; i++)
   fact = fact.multiply(BigInteger.valueOf(i));
  return fact;
 }

}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//ProjectEuler:36
/*
 * The decimal number, 585 = 10010010012 (binary), is palindromic in
 * both bases. Find the sum of all numbers, less than one million, which
 * are palindromic in base 10 and base 2. (Please note that the
 * palindromic number, in either base, may not include leading zeros.)
 */

//Efficient

public class Problem36 {
 public static void main(String[] args) {
  long sum = 0;
  for (Integer i = 1; i < 1000000; i++) {

   if (palindrome(Integer.toString(i))
     && palindrome(Integer.toBinaryString(i))) {
    sum = sum + i;
   }
  }
  System.out.print(sum);

 }

 public static boolean palindrome(String str) {
  return str.equals(new StringBuffer().append(str).reverse().toString());
 }
}
//RESULT:872187