#3896
Medium Algorithms Minimum operations to transform array into alternating prime
53.1% acceptance
May 13, 2026
60
4
You are given an integer array nums.
An array is considered alternating prime if:
Elements at even indices (0-based) are prime numbers.
Elements at odd indices are non-prime numbers.
In one operation, you may increment any element by 1.
Return the minimum number of operations required to transform nums into an alternating prime array.
A prime number is a natural number greater than 1 with only two factors, 1 and itself.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn min_operations(nums: Vec<i32>) -> i32 {
let max_v = *nums.iter().max().unwrap_or(&1) as usize;
let lim = (max_v + 16).max(8) * 2;
let mut is_prime = vec![true; lim];
is_prime[0] = false;
is_prime[1] = false;
let mut i = 2usize;
while i * i < lim {
if is_prime[i] {
let mut j = i * i;
while j < lim {
is_prime[j] = false;
j += i;
}
}
i += 1;
}
let mut next_prime = vec![0i32; lim];
let mut next_nonprime = vec![0i32; lim];
let mut lp: i32 = -1;
let mut ln: i32 = -1;
for v in (0..lim).rev() {
if is_prime[v] { lp = v as i32; }
else { ln = v as i32; }
next_prime[v] = lp;
next_nonprime[v] = ln;
}
let mut total = 0i64;
for (idx, &v) in nums.iter().enumerate() {
let v = v as usize;
let target = if idx % 2 == 0 { next_prime[v] } else { next_nonprime[v] };
total += (target as i64 - v as i64).max(0);
}
total as i32
}
}