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 |
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) { |
|||
⚫ | |||
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 |
var p = firstPrimeFactor.call(i) |
||
if ( |
if (p % 4 == 3) { |
||
var q = i / p |
|||
if (q != p && q % 4 == 3 && Int.isPrime(q)) { |
|||
bc |
if (bc < 50) blum[bc] = i |
||
counts[i % 10] = counts[i % 10] + 1 |
|||
bc = bc + 1 |
|||
if (bc == 50) { |
|||
System.print() |
System.print("First 50 Blum integers:") |
||
Fmt.tprint("$3d ", blum, 10) |
|||
System.print() |
|||
if (bc == |
} else if (bc == 26828 || bc % 1e5 == 0) { |
||
Fmt.print("The $,9r Blum integer is: $,9d", bc, i) |
|||
if (bc == 400000) { |
|||
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 |
|||
} |
} |
||
⚫ | |||
} |
} |
||
} |
} |
||
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> |