Prime numbers whose neighboring pairs are tetraprimes: Difference between revisions

Moved the Nim entry at the right place.
(Created Nim solution.)
(Moved the Nim entry at the right place.)
Line 582:
<pre>
Identical to Wren example.
</pre>
 
=={{header|J}}==
 
For this task we could use a couple tools -- one to enumerate primes less than some limit, and one to determine if a number is a tetraprime:
<syntaxhighlight lang=J>primeslt=: i.&.(p:inv)
 
tetrap=: 0:`(4=#@~.)@.(4=#)@q: ::0:"0</syntaxhighlight>
 
Thus:
 
<syntaxhighlight lang=J> NB. (1) primes less than 1e5 preceeded by two tetraprimes
{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
8647 15107 20407 20771 21491 23003 23531 24767 24971 27967 29147 33287 34847 36779 42187 42407 42667 43331 43991 46807 46867 51431 52691 52747 53891 54167 58567 63247 63367 69379 71711 73607 73867 74167 76507 76631 76847 80447 83591 84247 86243 87187 87803...
NB. (2) primes less than 1e5 followed by two tetraprimes
{{y#~*/tetrap 1 2+/y}} primeslt 1e5
8293 16553 17389 18289 22153 26893 29209 33409 35509 36293 39233 39829 40493 41809 45589 48109 58393 59629 59753 59981 60493 60913 64013 64921 65713 66169 69221 71329 74093 75577 75853 77689 77933 79393 79609 82913 84533 85853 87589 87701 88681 91153 93889...
NB. (3a) how many primes from (1) have 7 in a factor of a number in the preceeding pair?
+/0+./ .=7|1 2-~/{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
31
NB. (3b) how many primes from (2) have 7 in a factor of a number in the following pair?
+/0+./ .=7|1 2+/{{y#~*/tetrap 1 2+/y}} primeslt 1e5
36
NB. (4a) minimum, maximum gap between primes in (1)
(<./,>./)2 -~/\{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
56 6460
NB. (4b) minimum, maximum gap between primes in (2)
(<./,>./)2 -~/\{{y#~*/tetrap 1 2+/y}} primeslt 1e5
112 10284
NB. number of type (1) primes but for primes less than 1e6
#{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
885
NB. number of type (2) primes but for primes less than 1e6
#{{y#~*/tetrap 1 2+/y}} primeslt 1e5
46
NB. count of type (3a) for primes less than 1e6
+/0+./ .=7|1 2-~/{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
503
NB. count of type (3b) for primes less than 1e6
+/0+./ .=7|1 2+/{{y#~*/tetrap 1 2+/y}} primeslt 1e6
492
NB. gaps of type (4a) for primes less than 1e6
(<./,>./)2 -~/\{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
4 7712
NB. gaps of type (4b) for primes less than 1e6
(<./,>./)2 -~/\{{y#~*/tetrap 1 2+/y}} primeslt 1e6
4 10284</syntaxhighlight>
 
=={{header|Julia}}==
Yet another "output an OEIS sequence as produced by a function which takes the prime number sequence as its input" task.
<syntaxhighlight lang="juulia">""" rosettacode.org/wiki/Prime_numbers_whose_neighboring_pairs_are_tetraprimes """
 
using Statistics
using Primes
 
istetraprime(n) = (a = map(last, factor(n).pe); length(a) == 4 && all(==(1), a))
are_following_tetraprimes(n, cnt = 2) = all(istetraprime, n+1:n+cnt)
are_preceding_tetraprimes(n, cnt = 2) = all(istetraprime, n-cnt:n-1)
 
let
primes1M = primes(10^7)
pre1M = filter(are_preceding_tetraprimes, primes1M)
fol1M = filter(are_following_tetraprimes, primes1M)
pre100k = filter(<(100_000), pre1M)
fol100k = filter(<(100_000), fol1M)
 
pre1M_with7 = filter(i -> any(k -> (i - k) % 7 == 0, 1:2), pre1M)
fol1M_with7 = filter(i -> any(k -> (i + k) % 7 == 0, 1:2), fol1M)
pre100k_with7 = filter(<(100_000), pre1M_with7)
fol100k_with7 = filter(<(100_000), fol1M_with7)
 
p_gaps1M = [pre1M[i] - pre1M[i - 1] for i in 2:lastindex(pre1M)]
f_gaps1M = [fol1M[i] - fol1M[i - 1] for i in 2:lastindex(fol1M)]
p_gaps100k = [pre1M[i] - pre1M[i - 1] for i in 2:lastindex(pre1M) if pre1M[i] < 100_000]
f_gaps100k = [fol1M[i] - fol1M[i - 1] for i in 2:lastindex(fol1M) if fol1M[i] < 100_000]
 
pmin1M, pmedian1M, pmax1M = minimum(p_gaps1M), median(p_gaps1M), maximum(p_gaps1M)
fmin1M, fmedian1M, fmax1M = minimum(f_gaps1M), median(f_gaps1M), maximum(f_gaps1M)
pmin100k, pmedian100k, pmax100k = minimum(p_gaps100k), median(p_gaps100k), maximum(p_gaps100k)
fmin100k, fmedian100k, fmax100k = minimum(f_gaps100k), median(f_gaps100k), maximum(f_gaps100k)
 
for (tet, s, s2, tmin, tmed, tmax, t7) in [
(pre100k, "100,000", "preceding", pmin100k, pmedian100k, pmax100k, pre100k_with7),
(fol100k, "100,000", "following", fmin100k, fmedian100k, fmax100k, fol100k_with7),
(pre1M, "1,000,000", "preceding", pmin1M, pmedian1M, pmax1M, pre1M_with7),
(fol1M, "1,000,000", "following", fmin1M, fmedian1M, fmax1M, fol1M_with7),
]
print("Found $(length(tet)) primes under $s whose $s2 neighboring pair are tetraprimes")
if s == "100,000"
println(":")
foreach(p -> print(rpad(p[2], 6), p[1] % 10 == 0 ? "\n" : ""), enumerate(tet))
println()
else
println(".")
end
println("Minimum, median, and maximum gaps between those primes: $tmin $tmed $tmax")
println("Of those primes, $(length(t7)) have a neighboring pair one of whose factors is 7.\n")
end
end
</syntaxhighlight>{{out}}
<pre>
Found 49 primes under 100,000 whose preceding neighboring pair are tetraprimes:
8647 15107 20407 20771 21491 23003 23531 24767 24971 27967
29147 33287 34847 36779 42187 42407 42667 43331 43991 46807
46867 51431 52691 52747 53891 54167 58567 63247 63367 69379
71711 73607 73867 74167 76507 76631 76847 80447 83591 84247
86243 87187 87803 89387 93887 97547 97847 98347 99431
Minimum, median, and maximum gaps between those primes: 56 1208.0 6460
Of those primes, 31 have a neighboring pair one of whose factors is 7.
 
Found 46 primes under 100,000 whose following neighboring pair are tetraprimes:
8293 16553 17389 18289 22153 26893 29209 33409 35509 36293
39233 39829 40493 41809 45589 48109 58393 59629 59753 59981
60493 60913 64013 64921 65713 66169 69221 71329 74093 75577
75853 77689 77933 79393 79609 82913 84533 85853 87589 87701
88681 91153 93889 96017 97381 98453
Minimum, median, and maximum gaps between those primes: 112 1460.0 10284
Of those primes, 36 have a neighboring pair one of whose factors is 7.
 
Found 10815 primes under 1,000,000 whose preceding neighboring pair are tetraprimes.
Minimum, median, and maximum gaps between those primes: 4 648.0 9352
Of those primes, 5176 have a neighboring pair one of whose factors is 7.
 
Found 10551 primes under 1,000,000 whose following neighboring pair are tetraprimes.
Minimum, median, and maximum gaps between those primes: 4 660.0 10284
Of those primes, 5069 have a neighboring pair one of whose factors is 7.
</pre>
 
Line 774 ⟶ 900:
Median gap between those 10551 primes: 660
Maximum gap between those 10551 primes: 10284</pre>
 
=={{header|J}}==
 
For this task we could use a couple tools -- one to enumerate primes less than some limit, and one to determine if a number is a tetraprime:
<syntaxhighlight lang=J>primeslt=: i.&.(p:inv)
 
tetrap=: 0:`(4=#@~.)@.(4=#)@q: ::0:"0</syntaxhighlight>
 
Thus:
 
<syntaxhighlight lang=J> NB. (1) primes less than 1e5 preceeded by two tetraprimes
{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
8647 15107 20407 20771 21491 23003 23531 24767 24971 27967 29147 33287 34847 36779 42187 42407 42667 43331 43991 46807 46867 51431 52691 52747 53891 54167 58567 63247 63367 69379 71711 73607 73867 74167 76507 76631 76847 80447 83591 84247 86243 87187 87803...
NB. (2) primes less than 1e5 followed by two tetraprimes
{{y#~*/tetrap 1 2+/y}} primeslt 1e5
8293 16553 17389 18289 22153 26893 29209 33409 35509 36293 39233 39829 40493 41809 45589 48109 58393 59629 59753 59981 60493 60913 64013 64921 65713 66169 69221 71329 74093 75577 75853 77689 77933 79393 79609 82913 84533 85853 87589 87701 88681 91153 93889...
NB. (3a) how many primes from (1) have 7 in a factor of a number in the preceeding pair?
+/0+./ .=7|1 2-~/{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
31
NB. (3b) how many primes from (2) have 7 in a factor of a number in the following pair?
+/0+./ .=7|1 2+/{{y#~*/tetrap 1 2+/y}} primeslt 1e5
36
NB. (4a) minimum, maximum gap between primes in (1)
(<./,>./)2 -~/\{{y#~*/tetrap 1 2-~/y}} primeslt 1e5
56 6460
NB. (4b) minimum, maximum gap between primes in (2)
(<./,>./)2 -~/\{{y#~*/tetrap 1 2+/y}} primeslt 1e5
112 10284
NB. number of type (1) primes but for primes less than 1e6
#{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
885
NB. number of type (2) primes but for primes less than 1e6
#{{y#~*/tetrap 1 2+/y}} primeslt 1e5
46
NB. count of type (3a) for primes less than 1e6
+/0+./ .=7|1 2-~/{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
503
NB. count of type (3b) for primes less than 1e6
+/0+./ .=7|1 2+/{{y#~*/tetrap 1 2+/y}} primeslt 1e6
492
NB. gaps of type (4a) for primes less than 1e6
(<./,>./)2 -~/\{{y#~*/tetrap 1 2-~/y}} primeslt 1e6
4 7712
NB. gaps of type (4b) for primes less than 1e6
(<./,>./)2 -~/\{{y#~*/tetrap 1 2+/y}} primeslt 1e6
4 10284</syntaxhighlight>
 
=={{header|Julia}}==
Yet another "output an OEIS sequence as produced by a function which takes the prime number sequence as its input" task.
<syntaxhighlight lang="juulia">""" rosettacode.org/wiki/Prime_numbers_whose_neighboring_pairs_are_tetraprimes """
 
using Statistics
using Primes
 
istetraprime(n) = (a = map(last, factor(n).pe); length(a) == 4 && all(==(1), a))
are_following_tetraprimes(n, cnt = 2) = all(istetraprime, n+1:n+cnt)
are_preceding_tetraprimes(n, cnt = 2) = all(istetraprime, n-cnt:n-1)
 
let
primes1M = primes(10^7)
pre1M = filter(are_preceding_tetraprimes, primes1M)
fol1M = filter(are_following_tetraprimes, primes1M)
pre100k = filter(<(100_000), pre1M)
fol100k = filter(<(100_000), fol1M)
 
pre1M_with7 = filter(i -> any(k -> (i - k) % 7 == 0, 1:2), pre1M)
fol1M_with7 = filter(i -> any(k -> (i + k) % 7 == 0, 1:2), fol1M)
pre100k_with7 = filter(<(100_000), pre1M_with7)
fol100k_with7 = filter(<(100_000), fol1M_with7)
 
p_gaps1M = [pre1M[i] - pre1M[i - 1] for i in 2:lastindex(pre1M)]
f_gaps1M = [fol1M[i] - fol1M[i - 1] for i in 2:lastindex(fol1M)]
p_gaps100k = [pre1M[i] - pre1M[i - 1] for i in 2:lastindex(pre1M) if pre1M[i] < 100_000]
f_gaps100k = [fol1M[i] - fol1M[i - 1] for i in 2:lastindex(fol1M) if fol1M[i] < 100_000]
 
pmin1M, pmedian1M, pmax1M = minimum(p_gaps1M), median(p_gaps1M), maximum(p_gaps1M)
fmin1M, fmedian1M, fmax1M = minimum(f_gaps1M), median(f_gaps1M), maximum(f_gaps1M)
pmin100k, pmedian100k, pmax100k = minimum(p_gaps100k), median(p_gaps100k), maximum(p_gaps100k)
fmin100k, fmedian100k, fmax100k = minimum(f_gaps100k), median(f_gaps100k), maximum(f_gaps100k)
 
for (tet, s, s2, tmin, tmed, tmax, t7) in [
(pre100k, "100,000", "preceding", pmin100k, pmedian100k, pmax100k, pre100k_with7),
(fol100k, "100,000", "following", fmin100k, fmedian100k, fmax100k, fol100k_with7),
(pre1M, "1,000,000", "preceding", pmin1M, pmedian1M, pmax1M, pre1M_with7),
(fol1M, "1,000,000", "following", fmin1M, fmedian1M, fmax1M, fol1M_with7),
]
print("Found $(length(tet)) primes under $s whose $s2 neighboring pair are tetraprimes")
if s == "100,000"
println(":")
foreach(p -> print(rpad(p[2], 6), p[1] % 10 == 0 ? "\n" : ""), enumerate(tet))
println()
else
println(".")
end
println("Minimum, median, and maximum gaps between those primes: $tmin $tmed $tmax")
println("Of those primes, $(length(t7)) have a neighboring pair one of whose factors is 7.\n")
end
end
</syntaxhighlight>{{out}}
<pre>
Found 49 primes under 100,000 whose preceding neighboring pair are tetraprimes:
8647 15107 20407 20771 21491 23003 23531 24767 24971 27967
29147 33287 34847 36779 42187 42407 42667 43331 43991 46807
46867 51431 52691 52747 53891 54167 58567 63247 63367 69379
71711 73607 73867 74167 76507 76631 76847 80447 83591 84247
86243 87187 87803 89387 93887 97547 97847 98347 99431
Minimum, median, and maximum gaps between those primes: 56 1208.0 6460
Of those primes, 31 have a neighboring pair one of whose factors is 7.
 
Found 46 primes under 100,000 whose following neighboring pair are tetraprimes:
8293 16553 17389 18289 22153 26893 29209 33409 35509 36293
39233 39829 40493 41809 45589 48109 58393 59629 59753 59981
60493 60913 64013 64921 65713 66169 69221 71329 74093 75577
75853 77689 77933 79393 79609 82913 84533 85853 87589 87701
88681 91153 93889 96017 97381 98453
Minimum, median, and maximum gaps between those primes: 112 1460.0 10284
Of those primes, 36 have a neighboring pair one of whose factors is 7.
 
Found 10815 primes under 1,000,000 whose preceding neighboring pair are tetraprimes.
Minimum, median, and maximum gaps between those primes: 4 648.0 9352
Of those primes, 5176 have a neighboring pair one of whose factors is 7.
 
Found 10551 primes under 1,000,000 whose following neighboring pair are tetraprimes.
Minimum, median, and maximum gaps between those primes: 4 660.0 10284
Of those primes, 5069 have a neighboring pair one of whose factors is 7.
</pre>
 
=={{header|Phix}}==
256

edits