RosettaCodeData/Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rust
2020-02-17 23:21:07 -08:00

30 lines
691 B
Text

fn aks_coefficients(k: usize) -> Vec<i64> {
let mut coefficients = vec![0i64; k + 1];
coefficients[0] = 1;
for i in 1..(k + 1) {
coefficients[i] = -(1..i).fold(coefficients[0], |prev, j|{
let old = coefficients[j];
coefficients[j] = old - prev;
old
});
}
coefficients
}
fn is_prime(p: usize) -> bool {
if p < 2 {
false
} else {
let c = aks_coefficients(p);
(1..p / 2 + 1).all(|i| c[i] % p as i64 == 0)
}
}
fn main() {
for i in 0..8 {
println!("{}: {:?}", i, aks_coefficients(i));
}
for i in (1..=50).filter(|&i| is_prime(i)) {
print!("{} ", i);
}
}