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
61
62
63
64
65
66
67
68
69
70
pub fn nth(n: u32) -> u32 {
let mut nth_primes: Vec<u32> = Vec::new();
let mut index = 0;
loop {
if !nth_primes.is_empty() && nth_primes.len() == (n + 1) as usize {
return *nth_primes.get((n) as usize).unwrap();
}
if is_prime(index) {
nth_primes.push(index);
}
index += 1;
}
}
///
/// kiểm tra các số k có tính chất giống với tính chất của số nguyên tố, có thể
/// sử dụng một trong hai tính chất ñơn giản sau của số nguyên tố:
/// 1) Trừ số 2 và các số nguyên tố là số lẻ.
/// 2) Trừ số 2, số 3 các số nguyên tố có dạng 6K ± 1 (vì số có dạng 6K ± 2 thì
/// chia hết cho 2, số có dạng 6K ± 3 thì chia hết cho 3).
///
pub fn is_prime(number: u32) -> bool {
if number == 2 || number == 3 {
return true;
}
if number == 1 || number % 2 == 0 || number % 3 == 0 {
return false;
}
let sqrt_n = (number as f64).sqrt() as u32;
let mut k = 5;
let mut result = true;
while k <= sqrt_n {
if number % k == 0 || number % (k + 2) == 0 {
result = false;
break;
}
k += 6;
}
result
}
// pub fn is_prime(number: u32) -> bool {
// if number <= 1 {
// return false;
// }
//
// 2u32.pow(number) % number == 2
// }
// pub fn is_prime(number: u32) -> bool {
// let number = number as f64;
// if number < 2.0 {
// return false;
// }
//
// let square_number = number.sqrt() as u32 + 1;
// for i in 2..square_number {
// if number as u32 % i == 0 {
// return false;
// }
// }
//
// true
// }