Pages

Tuesday, September 8, 2009

Euler Problem 21 solution

Time (s): ~0.022
package margusmartseppcode.From_20_to_29;

public class Problem_21 {
 static int size = 10000;
 static int memcard[] = new int[size * 3];

 static int getSoPD(int nr) {
  if (memcard[nr] != 0)
   return memcard[nr];

  int sum = 1;
  for (int i = 2; i * i <= nr; i++)
   if (nr % i == 0)
    sum = sum + i + nr / i;

  return memcard[nr] = sum;
 }

 public static void main(String[] args) {
  int sum = 0, b;

  for (int i = 2; i < size; i++)
   if (((b = getSoPD(i)) > i) && (getSoPD(b) == i))
    sum += b + i;

  System.out.println(sum);
 }
}

No comments:

Post a Comment