如果p1和p2(p1< p2)均为素数,且任意整数p(p1< p< p2)都不是素数,则说素数p1与p2是相邻的,并定义它们之间的距离为d= p2 - p1。给定正整数L和U,求出区间[L, U]中距离最小的两个相邻素数C1与C2和距离最大的两个相邻素数D1与D2。
例如,L=2,U=17时,C1=2,C2=3,D1=7,D2=11。
import java.util.ArrayList;
import java.util.Scanner;
public class PrimeDistance {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		int max = Integer.MIN_VALUE;
		int min = Integer.MAX_VALUE;
		int c1 = 0;
		int c2 = 0;
		int d1 = 0;
		int d2 = 0;
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		int L = Integer.parseInt(str.split(" ")[0]);
		int R = Integer.parseInt(str.split(" ")[1]);
		for (int i = L; i <= R; i++) {
			if (isPrime(i)) {
				list.add(i);
			}
		}
		for (int i = 1; i < list.size(); i++) {
			if ((list.get(i) - list.get(i - 1)) > max) {
				max = list.get(i) - list.get(i - 1);
				d1 = list.get(i - 1);
				d2 = list.get(i);
			}
			if ((list.get(i) - list.get(i - 1)) < min) {
				min = list.get(i) - list.get(i - 1);
				c1 = list.get(i - 1);
				c2 = list.get(i);
			}
		}
		System.out
				.println("c1=" + c1 + ",c2=" + c2 + ",d1=" + d1 + ",d2=" + d2);
	}
	private static boolean isPrime(int num) {
		for (int i = 2; i <= num / 2; i++) {
			if (num % i == 0) {
				return false;
			}
		}
		return true;
	}
}
【蓝桥杯】PrimeDistance,布布扣,bubuko.com
原文地址:http://blog.csdn.net/tracysilocean/article/details/26501041