11package fmt.kotlin.fundamentals
22
3+ import kotlin.text.Typography.prime
4+
35class Tp2 {
46
57 fun getFirstPrimeNumbers (nbToFind : Int ): List <Int > {
6- return arrayListOf<Int >()
8+ // The list containing all the prime numbers we found
9+ // It is a val because we will modify the array but not build a new array each time we add something to it
10+ val primeNumbers = arrayListOf<Int >()
11+
12+ // Start with 2 as 0 and 1 are not prime numbers
13+ // n is a var because we will change it at the end of each loop to test the next number
14+ var n = 2
15+
16+ // Iterate while we don't have enough prime numbers in the list we want to return
17+ while (primeNumbers.size < nbToFind) {
18+ var prime = true
19+
20+ // Iterate over every number until the one we want to test to see if it can be divided
21+ for (i in 2 .. n - 1 ) {
22+ if (n % i == 0 ) {
23+ prime = false
24+ // It if can be divided once, no need to test other numbers
25+ break
26+ }
27+ }
28+
29+ // Add it to the list we want to return, if we did not find a divisor
30+ if (prime) {
31+ primeNumbers.add(n)
32+ }
33+
34+ // We try the next number
35+ n++
36+ }
37+
38+ return primeNumbers
39+ }
40+
41+ fun getFirstPrimeNumbersBetter (nbToFind : Int ): List <Int > {
42+ // The list containing all the prime numbers we found
43+ // It is a val because we will modify the array but not build a new array each time we add something to it
44+ val primeNumbers = arrayListOf<Int >()
45+
46+ // Start with 2 as 0 and 1 are not prime numbers
47+ // n is a var because we will change it at the end of each loop to test the next number
48+ var n = 2
49+
50+ // Iterate while we don't have enough prime numbers in the list we want to return
51+ while (primeNumbers.size < nbToFind) {
52+ // Add it to the list we want to return, if we did not find a divisor
53+ if (isPrime(n, primeNumbers)) {
54+ primeNumbers.add(n)
55+ }
56+
57+ // We try the next number
58+ n++
59+ }
60+
61+ return primeNumbers
62+ }
63+
64+ private fun isPrime (n : Int , primeNumbers : List <Int >): Boolean {
65+ for (i in primeNumbers) {
66+ if (canBeDivided(n, i)) {
67+ // It if can be divided once, no need to test other numbers
68+ return false
69+ }
70+ }
71+ return true
772 }
73+
74+ private fun canBeDivided (n : Int , i : Int ) = n % i == 0
875}
0 commit comments