Problem10

package com.shui.mu.yao.io.algorithm;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 
 * @author shuimuqinghua77 @date 2011-11-3下午07:44:42
 */
/**
 * The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the
 * primes below two million.
 */
public class Problem10 {
	private static List<Long> seed = new ArrayList<Long>();

	private static void initSeed(long[] seeds) {
		for (long i : seeds)
			seed.add(i);
	}

	public static long sumBelowTop(long top) {
		initSeed(new long[] { 2 });
		long middle = (long) Math.sqrt(top);
		for (long k = 2, factor = 2, i = factor * k - 1; i < top; factor++, i = factor
				* k - 1) {
			boolean isPrime = true;
			for (long s : seed) {
				if (s > middle)
					break;
				if (i % s == 0) {
					isPrime = false;
					break;
				}

			}
			if (isPrime)
				seed.add(i);
		}
		long sum = 0;
		for (long s : seed) {
			sum += s;
		}
		return sum;

	}

	public static void main(String[] args) {
		long sum = sumBelowTop(2000000l);
		// System.out.println(Arrays.toString(seed.toArray()));
		System.out.println(sum);
	}
}

你可能感兴趣的:(java,Algorithm)