package margusmartseppcode.From_30_to_39;
public class Problem_39 {
// Pythagorean theorem for right angle triangle:
// a*a+b*b==c*c where c=(p-a-b)
// same as (MOD(p(p–2a),2(p-a))== 0)
public static void main(String[] args) {
int max = 0, limit = 1000, imax = 0;
for (int i = 2; i <= limit; i += 2)
for (int j = 2, t = 0; j <= i / 4; j++) {
if (i * (i - 2 * j) % (2 * (i - j)) == 0)
t++;
if (t > imax) {
imax = t;
max = i;
}
}
System.out.println(max);
}
}
Showing posts with label Euler Problem 30-39. Show all posts
Showing posts with label Euler Problem 30-39. Show all posts
Wednesday, September 9, 2009
Euler Problem 39 solution
Time (s): ~0.009
Euler Problem 38 solution
Time (s): ~0.012
package margusmartseppcode.From_30_to_39;
import java.util.HashSet;
import java.util.Set;
public class Problem_38 {
static final int nbrs = 9;
static boolean isPandigital(String s) {
return isPandigital(s, nbrs);
}
static boolean isPandigital(String s, int nr) {
if (s.length() != nr)
return false;
Set<Character> set = new HashSet<Character>();
for (int i = 0; i < nr; i++)
set.add(s.charAt(i));
if (set.size() != nr)
return false;
if (set.contains('0'))
return false;
return true;
}
public static void main(String[] args) {
String maxPan = "";
for (int i = 9876; i > 9123; i--)
if (isPandigital(maxPan = "" + i + (i + i)))
break;
System.out.println(maxPan);
}
}
Euler Problem 37 solution
Time (s): ~0.599
package margusmartseppcode.From_30_to_39;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Problem_37 {
static Integer cint(String nr) {
return Integer.parseInt(nr);
}
static boolean isLTP(String mem, Set<Integer> primes) {
int n = mem.length();
if (n < 1)
return true;
return primes.contains(cint(mem)) && isLTP(mem.substring(1), primes);
}
static boolean isRTP(String mem, Set<Integer> primes) {
int n = mem.length();
if (n < 1)
return true;
return primes.contains(cint(mem))
&& isRTP(mem.substring(0, n - 1), primes);
}
static boolean isTP(String mem, Set<Integer> primes) {
return isLTP(mem, primes) && isRTP(mem, primes);
}
private static void bTP(Integer mem, Set<Integer> primes,
Set<Integer> truncatable) {
if (primes.contains(mem)) {
if (isTP(""+mem, primes))
truncatable.add(mem);
TruncatablePrimes(mem, primes, truncatable);
}
}
private static void TruncatablePrimes(Integer elem, Set<Integer> primes,
Set<Integer> truncatable) {
String[] o = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
String s = "" + elem;
for (String pos : o) {
bTP(cint(s + pos), primes, truncatable);
bTP(cint(pos + s), primes, truncatable);
}
}
public static void main(String[] args) throws FileNotFoundException {
Set<Integer> truncatable = new HashSet<Integer>();
Set<Integer> primes = new HashSet<Integer>();
Scanner sc = new Scanner(new File("primes1m.txt"));
int sum = 0;
for (String tmp = sc.next(); sc.hasNext(); tmp = sc.next())
primes.add(Integer.parseInt(tmp));
for (Integer elem : new Integer[] { 3, 7 })
TruncatablePrimes(elem, primes, truncatable);
for (Integer elem : truncatable)
sum += elem;
System.out.println(sum);
}
}
Labels:
Euler Problem 30-39,
File,
HashSet,
prime numbers,
Scanner,
truncatable
Euler Problem 36 solution
Time (s): ~0.476
package margusmartseppcode.From_30_to_39;
public class Problem_36 {
static boolean palindrome(String p) {
return p.equals(new StringBuilder(p).reverse().toString());
}
static String dec2bin(int number) {
return Integer.toString(number, 2);
}
public static void main(String[] args) {
int sum = 0, size = 1000000;
for (int i = 0; i < size; i++)
sum += palindrome("" + i) && palindrome(dec2bin(i)) ? i : 0;
System.out.println(sum);
}
}
Euler Problem 35 solution
Time (s): ~0.921
package margusmartseppcode.From_30_to_39;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Problem_35 {
static boolean contains_024568(final char[] input) {
int n = input.length;
for (int i = 4; i < n; i++)
if (input[i] == '0' || input[i] == '2' || input[i] == '4'
|| input[i] == '5' || input[i] == '6' || input[i] == '8')
return true;
return false;
}
static void rotate(StringBuilder sb) {
sb.append(sb.charAt(0)).delete(0, 1);
}
static int iRotate(StringBuilder s) {
return Integer.parseInt(s.append(s.charAt(0)).delete(0, 1).toString());
}
static void CircularPrimes(Integer elem, Set<Integer> primes,
Set<Integer> found, Set<Integer> circular) {
StringBuilder sb = new StringBuilder("" + elem);
ArrayList<Integer> tmp = new ArrayList<Integer>();
int n = sb.length(), i;
if (found.contains(elem) || circular.contains(elem))
return;
for (i = 1; i <= n; i++)
tmp.add(iRotate(sb));
for (Integer mem : tmp)
if (!primes.contains(mem)) {
found.addAll(tmp);
return;
}
circular.addAll(tmp);
}
public static void main(String[] args) throws FileNotFoundException {
Set<Integer> circular = new HashSet<Integer>();
Set<Integer> primes = new HashSet<Integer>();
Set<Integer> found = new HashSet<Integer>();
Scanner sc = new Scanner(new File("primes1m.txt"));
for (String tmp = sc.next(); sc.hasNext(); tmp = sc.next())
if (!contains_024568(tmp.toCharArray()))
primes.add(Integer.parseInt(tmp));
for (Integer elem : primes)
CircularPrimes(elem, primes, found, circular);
System.out.println(circular.size());
}
}
Tuesday, September 8, 2009
Euler Problem 34 solution
Time (s): ~0.175
package margusmartseppcode.From_30_to_39;
public class Problem_34 {
public static void main(String[] args) {
int fact[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880 };
int s = 0, sum = 0;
for (int i = 10; i < fact[9] + 1; i++, sum = 0) {
for (char c : ("" + i).toCharArray())
sum += fact[Character.getNumericValue(c)];
if (sum == i)
s += i;
}
System.out.println(s);
}
}
Euler Problem 33 solution
Time (s): ~0.001
package margusmartseppcode.From_30_to_39;
public class Problem_33 {
public static void main(String[] args) {
int d = 1;
double ii;
for (int i = 1; i < 10; i++)
for (int j = 1; j < i; j++)
for (double k = 1; k < j; k++) {
ii = (i * 10 + j) / (k * 10 + i);
if (ii == j / k)
d *= ii;
}
System.out.println(d);
}
}
Euler Problem 32 solution
Time (s): ~0.066
package margusmartseppcode.From_30_to_39;
import java.util.HashSet;
import java.util.Set;
public class Problem_32 {
static final int nbrs = 9;
static boolean isPandigital(String s) {
return isPandigital(s, nbrs);
}
static boolean isPandigital(String s, int nr) {
if (s.length() != nr)
return false;
Set<Character> set = new HashSet<<Character>();
for (int i = 0; i < nr; i++)
set.add(s.charAt(i));
if (set.size() != nr)
return false;
if (set.contains('0'))
return false;
return true;
}
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
int sum = 0;
for (int i = 2, n = 1234; i < 100; i++, n = i > nbrs ? 123 : 1234)
for (int j = n; j < (int) (10000 / i + 1); j++)
if (isPandigital("" + i + j + (i * j)))
set.add(i * j);
for (Integer val : set)
sum += val;
System.out.println(sum);
}
}
Euler Problem 31 solution
Time (s): ~0.001
package margusmartseppcode.From_30_to_39;
public class Problem_31 {
public static void main(String[] args) {
int target = 200, coins[] = { 1, 2, 5, 10, 20, 50, 100, 200 };
int ways[] = new int[target + 1];
ways[0] = 1;
for (int coin : coins)
for (int i = coin; i < target + 1; i++)
ways[i] += ways[i - coin];
System.out.println(ways[target]);
}
}
Euler Problem 30 solution
Time (s): ~0.662
package margusmartseppcode.From_30_to_39;
public class Problem_30 {
public static void main(String[] args) {
int EXP = 5, i = 10, s = 0, t = 0;
long max = (long) (Math.pow(9.0, EXP) * (EXP - 1));
for (int n = i; n < max; t += (s == n ? s : 0), n++, s = 0)
for (i = n; i > 0; i /= 10)
s += Math.pow((i % 10), EXP);
System.out.println(t);
}
}
Subscribe to:
Posts (Atom)