Jump to content

Sexy primes: Difference between revisions

Added Wren
m (Simplified Prolog code again)
(Added Wren)
Line 2,092:
...where last 10 unsexy primes are: [999853, 999863, 999883, 999907, 999917, 999931, 999961, 999979, 999983, 1000003]
</pre>
 
=={{header|Wren}}==
{{trans|Go}}
<lang ecmascript>var sieve = Fn.new { |limit|
limit = limit + 1
// True denotes composite, false denotes prime.
var c = List.filled(limit, false)
c[0] = true
c[1] = true
// no need to bother with even numbers over 2 for this task
var p = 3 // Start from 3.
while (true) {
var p2 = p * p
if (p2 >= limit) break
var i = p2
while (i < limit) {
c[i] = true
i = i + 2*p
}
while (true) {
p = p + 2
if (!c[p]) break
}
}
return c
}
 
var commatize = Fn.new { |n|
var s = "%(n)"
if (n < 0) s = s[1..-1]
var i = s.count - 3
while (i >= 1) {
s = s[0...i] + "," + s[i..-1]
i = i - 3
}
if (n >= 0) return s
return "-" + s
}
 
var printHelper = Fn.new { |cat, le, lim, max|
var cle = commatize.call(le)
var clim = commatize.call(lim)
if (cat != "unsexy primes") cat = "sexy prime " + cat
System.print("Number of %(cat) less than %(clim) = %(cle)")
var last = (le < max) ? le : max
var verb = (last == 1) ? "is" : "are"
return [le, last, verb]
}
 
var lim = 1000035
var sv = sieve.call(lim-1)
var pairs = []
var trips = []
var quads = []
var quins = []
var unsexy = [2, 3]
var i = 3
while (i < lim) {
if (i > 5 && i < lim-6 && !sv[i] && sv[i-6] && sv[i+6]) {
unsexy.add(i)
} else {
if (i < lim-6 && !sv[i] && !sv[i+6]) {
pairs.add([i, i+6])
if (i < lim-12 && !sv[i+12]) {
trips.add([i, i+6, i+12])
if (i < lim-18 && !sv[i+18]) {
quads.add([i, i+6, i+12, i+18])
if (i < lim-24 && !sv[i+24]) {
quins.add([i, i+6, i+12, i+18, i+24])
}
}
}
}
}
i = i + 2
}
var le
var n
var verb
var unwrap = Fn.new { |t|
le = t[0]
n = t[1]
verb = t[2]
}
 
unwrap.call(printHelper.call("pairs", pairs.count, lim, 5))
System.print("The last %(n) %(verb):\n %(pairs[le-n..-1])\n")
unwrap.call(printHelper.call("triplets", trips.count, lim, 5))
System.print("The last %(n) %(verb):\n %(trips[le-n..-1])\n")
 
unwrap.call(printHelper.call("quadruplets", quads.count, lim, 5))
System.print("The last %(n) %(verb):\n %(quads[le-n..-1])\n")
 
unwrap.call(printHelper.call("quintuplets", quins.count, lim, 5))
System.print("The last %(n) %(verb):\n %(quins[le-n..-1])\n")
 
unwrap.call(printHelper.call("unsexy primes", unsexy.count, lim, 10))
System.print("The last %(n) %(verb):\n %(unsexy[le-n..-1])\n")</lang>
 
{{out}}
<pre>
Number of sexy prime pairs less than 1,000,035 = 16,386
The last 5 are:
[[999371, 999377], [999431, 999437], [999721, 999727], [999763, 999769], [999953, 999959]]
 
Number of sexy prime triplets less than 1,000,035 = 2,900
The last 5 are:
[[997427, 997433, 997439], [997541, 997547, 997553], [998071, 998077, 998083], [998617, 998623, 998629], [998737, 998743, 998749]]
 
Number of sexy prime quadruplets less than 1,000,035 = 325
The last 5 are:
[[977351, 977357, 977363, 977369], [983771, 983777, 983783, 983789], [986131, 986137, 986143, 986149], [990371, 990377, 990383, 990389], [997091, 997097, 997103, 997109]]
 
Number of sexy prime quintuplets less than 1,000,035 = 1
The last 1 is:
[[5, 11, 17, 23, 29]]
 
Number of unsexy primes less than 1,000,035 = 48,627
The last 10 are:
[999853, 999863, 999883, 999907, 999917, 999931, 999961, 999979, 999983, 1000003]
</pre>
 
 
=={{header|zkl}}==
9,490

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.