Problem 50

问题描述:

The prime 41, can be written as the sum of six consecutive primes:

41 = 2 + 3 + 5 + 7 + 11 + 13

This is the longest sum of consecutive primes that adds to a prime below one-hundred.

The longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953.

Which prime, below one-million, can be written as the sum of the most consecutive primes?


解决问题:

 

package projecteuler;

import java.util.Arrays;

public class Problem50 {

	public static boolean[] prime = new boolean[1000000];

	public static boolean IsPrime(long number) {

		for (int i = 2; i * i <= number; i++) {
			if (number % i == 0)
				return false;
		}
		return true;
	}

	public static void main(String[] args) {
		Arrays.fill(prime, false);
		int[] elements = new int[1000000];
		Arrays.fill(elements, 0);
		int index = 0;
		for (int i = 2; i < 1000000; i++) {
			if (IsPrime(i)) {
				prime[i] = true;
				elements[index] = i;
				index++;
			}
		}

		int len = 0;
		int sum = 0;
		int max = 0;
		for (int i = 0; i < index; i++) {
			sum = 0;
			for(int j =i; j<index; j++){
				sum += elements[j];
				if (sum > 1000000) {
					break;
				}
				if (sum<1000000&&prime[sum]) {
					if (len < j-i) {
						len = j-i;
						max = sum;
//						System.out.println("I:"+i+",J:"+j+",Sum:"+sum);
					}
				}
			}
		}
		System.out.println("Max:"+max);
		
	}

}

猜你喜欢

转载自to-zoe-yang.iteye.com/blog/1164892
50
50A