1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package questions;
import java.util.*;
public class _3115质数的最大距离 {
public int maximumPrimeDifference(int[] nums) { int i = 0, j = nums.length - 1; boolean[] flags = new boolean[2]; while (i <= j) { if (!flags[0]) { if (isPrime(nums[i])) { flags[0] = true; } else { i++; } } else if (!flags[1]) { if (isPrime(nums[j])) { flags[1] = true; } else { j--; } } else { return j - i; } } return 0; }
Set<Integer> primes = new HashSet<>(Arrays.asList(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));
static List<Integer> primeList = new ArrayList<>();
static { for (int i = 2; i <= 100; i++) { boolean flag = true; for (int j = 0; j < primeList.size(); j++) { if (i % primeList.get(j) == 0) { flag = false; break; } } if (flag) { primeList.add(i); } } }
private boolean isPrime(int n) { int idx = Collections.binarySearch(primeList, n); return idx >= 0; }
public static void main(String[] args) { _3115质数的最大距离 q = new _3115质数的最大距离(); System.out.println(q.maximumPrimeDifference(new int[]{3, 5, 2, 4})); } }
|