Blum integer: Difference between revisions

Content added Content deleted
(→‎{{header|C}}: Specialized primeFactors routine - about 20% faster than before.)
(→‎{{header|Wren}}: Optimized - about 30% faster than before.)
Line 158: Line 158:
import "./fmt" for Fmt
import "./fmt" for Fmt


var blum = []
var inc = [4, 2, 4, 2, 4, 6, 2, 6]

// Assumes n is odd.
var firstPrimeFactor = Fn.new { |n|
if (n == 1) return 1
if (n%3 == 0) return 3
if (n%5 == 0) return 5
var k = 7
var i = 0
while (k * k <= n) {
if (n%k == 0) {
return k
} else {
k = k + inc[i]
i = (i + 1) % 8
}
}
return n
}

var blum = List.filled(50, 0)
var bc = 0
var bc = 0
var counts = { 1: 0, 3: 0, 7: 0, 9: 0 }
var counts = { 1: 0, 3: 0, 7: 0, 9: 0 }
var i = 1
var i = 1
while (true) {
while (true) {
var f = Int.primeFactors(i)
var p = firstPrimeFactor.call(i)
if (f.count == 2 && f[0] != f[1] && f[0] % 4 == 3 && f[1] % 4 == 3) {
if (p % 4 == 3) {
if (bc < 50) blum.add(i)
var q = i / p
counts[i % 10] = counts[i % 10] + 1
if (q != p && q % 4 == 3 && Int.isPrime(q)) {
bc = bc + 1
if (bc < 50) blum[bc] = i
if (bc == 50) {
counts[i % 10] = counts[i % 10] + 1
System.print("First 50 Blum integers:")
bc = bc + 1
Fmt.tprint("$3d ", blum, 10)
if (bc == 50) {
System.print()
System.print("First 50 Blum integers:")
} else if (bc == 26828 || bc % 1e5 == 0) {
Fmt.tprint("$3d ", blum, 10)
Fmt.print("The $,9r Blum integer is: $,9d", bc, i)
System.print()
if (bc == 400000) {
} else if (bc == 26828 || bc % 1e5 == 0) {
System.print("\n\% distribution of the first 400,000 Blum integers:")
Fmt.print("The $,9r Blum integer is: $,9d", bc, i)
for (j in [1, 3, 7, 9]) {
if (bc == 400000) {
Fmt.print(" $6.3f\% end in $d", counts[j]/4000, j)
System.print("\n\% distribution of the first 400,000 Blum integers:")
for (i in [1, 3, 7, 9]) {
Fmt.print(" $6.3f\% end in $d", counts[i]/4000, i)
}
return
}
}
return
}
}
}
}
Line 201: Line 224:
The 400,000th Blum integer is: 8,802,377
The 400,000th Blum integer is: 8,802,377


% distribution of the first 400,000 Blum integers:
% distribution of the first 400,000 Blum integers is:
25.001% end in 1
25.001% end in 1
25.017% end in 3
25.017% end in 3
24.997% end in 7
24.997% end in 7
24.985% end in 9
24.985% end in 9
</pre>
</pre>