forked from keep-starknet-strange/alexandria
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathis_prime.cairo
37 lines (30 loc) · 781 Bytes
/
is_prime.cairo
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
use alexandria_math::fast_root::fast_sqrt;
/// Check if the given number is prime
/// # Arguments
/// * `n` - The given number
/// * `iter` - The number of iterations to run when sqrting the number, the higher the more accurate
/// (usually 10 is enough)
/// # Returns
/// * `bool` - if the given number is prime
pub fn is_prime(n: u128, iter: usize) -> bool {
if n <= 1 {
return false;
}
if n <= 3 {
return true;
}
if n % 2 == 0 {
return false;
}
let divider_limit = fast_sqrt(n, iter);
let mut current_divider = 3;
loop {
if current_divider > divider_limit {
break true;
}
if n % current_divider == 0 {
break false;
}
current_divider += 2;
}
}