Parallel calculations: Difference between revisions
Content added Content deleted
(Added Kotlin) |
|||
Line 1,050: | Line 1,050: | ||
<pre> |
<pre> |
||
The number that has the largest minimum prime factor is 98421229882942378967, with a smallest factor of 736717 |
The number that has the largest minimum prime factor is 98421229882942378967, with a smallest factor of 736717 |
||
</pre> |
|||
=={{header|Kotlin}}== |
|||
<lang scala>// version 1.1.51 |
|||
import java.util.stream.Collectors |
|||
/* returns the number itself, its smallest prime factor and all its prime factors */ |
|||
fun primeFactorInfo(n: Int): Triple<Int, Int, List<Int>> { |
|||
if (n <= 1) throw IllegalArgumentException("Number must be more than one") |
|||
if (isPrime(n)) return Triple(n, n, listOf(n)) |
|||
val factors = mutableListOf<Int>() |
|||
var factor = 2 |
|||
var nn = n |
|||
while (true) { |
|||
if (nn % factor == 0) { |
|||
factors.add(factor) |
|||
nn /= factor |
|||
if (nn == 1) return Triple(n, factors.min()!!, factors) |
|||
if (isPrime(nn)) factor = nn |
|||
} |
|||
else if (factor >= 3) factor += 2 |
|||
else factor = 3 |
|||
} |
|||
} |
|||
fun isPrime(n: Int) : Boolean { |
|||
if (n < 2) return false |
|||
if (n % 2 == 0) return n == 2 |
|||
if (n % 3 == 0) return n == 3 |
|||
var d = 5 |
|||
while (d * d <= n) { |
|||
if (n % d == 0) return false |
|||
d += 2 |
|||
if (n % d == 0) return false |
|||
d += 4 |
|||
} |
|||
return true |
|||
} |
|||
fun main(args: Array<String>) { |
|||
val numbers = listOf( |
|||
12757923, 12878611, 12878893, 12757923, 15808973, 15780709, 197622519 |
|||
) |
|||
val info = numbers.stream() |
|||
.parallel() |
|||
.map { primeFactorInfo(it) } |
|||
.collect(Collectors.toList()) |
|||
val maxFactor = info.maxBy { it.second }!!.second |
|||
val results = info.filter { it.second == maxFactor } |
|||
println("The following number(s) have the largest minimal prime factor of $maxFactor:") |
|||
for (result in results) { |
|||
println(" ${result.first} whose prime factors are ${result.third}") |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
The following number(s) have the largest minimal prime factor of 47: |
|||
12878611 whose prime factors are [47, 101, 2713] |
|||
12878893 whose prime factors are [47, 274019] |
|||
</pre> |
</pre> |
||