package margusmartseppcode.From_40_to_49;
import java.util.HashSet;
import java.util.Set;
public class Problem_44 {
public static void main(String[] args) {
Set<integer> set = new HashSet<integer>();
int p[] = new int[10000];
int i = 0, j = 0;
boolean out = false;
for (i = 1; i < 10000; i++)
set.add(p[i] = (i * 3 * i - i) / 2);
for (i = 1; i < 10000 && !out; i++)
for (j = 1; j < i && !out; j++)
if (set.contains(p[i] + p[j]) && set.contains(p[i] - p[j]))
out = true;
System.out.println(p[i] - p[j]);
}
}
Showing posts with label HashSet. Show all posts
Showing posts with label HashSet. Show all posts
Sunday, September 13, 2009
Euler Problem 44 solution
Time (s): ~0.294
Labels:
Euler Problem 40-49,
HashSet,
pentagonal numbers
Wednesday, September 9, 2009
Euler Problem 41 solution
Time (s): ~0.009
package margusmartseppcode.From_40_to_49;
import java.util.HashSet;
import java.util.Set;
public class Problem_41 {
static final int nbrs = 7;
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;
if (set.contains('8'))
return false;
if (set.contains('9'))
return false;
return true;
}
// Call only if: (n>0&&(i%2==0||i%3==0||i%5==0||i%7==0))
static boolean isPrimeS(final int n) {
final int r = (int) Math.floor(Math.sqrt(n));
for (int f = 5; f <= r; f += 6)
if (n % f == 0 || n % (f + 2) == 0)
return false;
return true;
}
public static void main(String[] args) {
int i;
for (i = 7654321; i >= 1234567; i -= 2) {
if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0)
continue;
if (!isPrimeS(i))
continue;
if (isPandigital("" + i))
break;
}
System.out.println(i);
}
}
Labels:
Euler Problem 40-49,
HashSet,
pandigital,
prime numbers
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 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 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 29 solution
Time (s): ~0.025
package margusmartseppcode.From_20_to_29;
import java.util.HashSet;
import java.util.Set;
public class Problem_29 {
public static void main(String[] args) {
int max = 101;
Set<double> set = new HashSet<double>();
for (Long i = 2L; i < max; i++)
for (Long j = 2L; j < max; j++)
set.add(Math.pow(i, j));
System.out.println(set.size());
}
}
Labels:
Euler Problem 20-29,
HashSet,
unique elements
Euler Problem 27 solution
Time (s): ~0.034
package margusmartseppcode.From_20_to_29;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Problem_27 {
static Integer prime_k[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107,
109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179,
181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331,
337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487,
491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,
587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653,
659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929,
937, 941, 947, 953, 967, 971, 977, 983, 991, 997 };
public static void main(String[] args) {
int nmax = 0, n, pr = 0;
Set<Integer> set = new HashSet<Integer>(Arrays.asList(prime_k));
for (int i = -999; i < 999; i += 2)
for (int b : prime_k) {
n = 1;
while (set.contains(n * n + i * n + b))
n += 1;
if (n > nmax) {
nmax = n;
pr = i * b;
}
}
System.out.println(pr);
}
}
Labels:
Euler Problem 20-29,
HashSet,
prime numbers,
quadratic formula
Subscribe to:
Posts (Atom)