Descending primes: Difference between revisions
(Added Wren) |
(Add Factor) |
||
Line 8: | Line 8: | ||
*[[Ascending primes]] |
*[[Ascending primes]] |
||
=={{header|Factor}}== |
|||
{{works with|Factor|0.99 2021-06-02}} |
|||
<lang factor>USING: grouping grouping.extras math math.combinatorics |
|||
math.functions math.primes math.ranges prettyprint sequences |
|||
sequences.extras ; |
|||
9 1 [a,b] all-subsets [ reverse 0 [ 10^ * + ] reduce-index ] |
|||
[ prime? ] map-filter 10 "" pad-groups 10 group simple-table.</lang> |
|||
{{out}} |
|||
<pre> |
|||
7 5 3 2 97 83 73 71 61 53 |
|||
43 41 31 983 971 953 941 863 853 821 |
|||
761 751 743 653 643 641 631 541 521 431 |
|||
421 9871 9851 9743 9721 9643 9631 9521 9431 9421 |
|||
8761 8753 8741 8731 8641 8543 8521 8431 7643 7621 |
|||
7541 7321 6521 6421 5431 98731 98641 98621 98543 98321 |
|||
97651 96431 94321 87643 87641 87631 87541 87421 86531 76543 |
|||
76541 76421 75431 987631 987541 986543 975421 876431 865321 764321 |
|||
9875321 9754321 8765321 8764321 98765431 98764321 97654321 |
|||
</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
Revision as of 17:09, 27 March 2022
You are encouraged to solve this task according to the task description, using any language you may know.
Generate and show all primes with strictly descending decimal digits.
- See also
- Related
Factor
<lang factor>USING: grouping grouping.extras math math.combinatorics math.functions math.primes math.ranges prettyprint sequences sequences.extras ;
9 1 [a,b] all-subsets [ reverse 0 [ 10^ * + ] reduce-index ] [ prime? ] map-filter 10 "" pad-groups 10 group simple-table.</lang>
- Output:
7 5 3 2 97 83 73 71 61 53 43 41 31 983 971 953 941 863 853 821 761 751 743 653 643 641 631 541 521 431 421 9871 9851 9743 9721 9643 9631 9521 9431 9421 8761 8753 8741 8731 8641 8543 8521 8431 7643 7621 7541 7321 6521 6421 5431 98731 98641 98621 98543 98321 97651 96431 94321 87643 87641 87631 87541 87421 86531 76543 76541 76421 75431 987631 987541 986543 975421 876431 865321 764321 9875321 9754321 8765321 8764321 98765431 98764321 97654321
Perl
<lang perl>#!/usr/bin/perl
use strict; # https://rosettacode.org/wiki/Descending_primes use warnings; use ntheory qw( is_prime );
print join(, sort map { sprintf "%9d", $_ } grep /./ && is_prime($_),
glob join , map "{$_,}", reverse 1 .. 9) =~ s/.{45}\K/\n/gr;</lang>
- Output:
2 3 5 7 31 41 43 53 61 71 73 83 97 421 431 521 541 631 641 643 653 743 751 761 821 853 863 941 953 971 983 5431 6421 6521 7321 7541 7621 7643 8431 8521 8543 8641 8731 8741 8753 8761 9421 9431 9521 9631 9643 9721 9743 9851 9871 75431 76421 76541 76543 86531 87421 87541 87631 87641 87643 94321 96431 97651 98321 98543 98621 98641 98731 764321 865321 876431 975421 986543 987541 987631 8764321 8765321 9754321 9875321 97654321 98764321 98765431
Phix
with javascript_semantics function descending_primes(sequence res, atom p=0, max_digit=9) for d=1 to max_digit do atom np = p*10+d if odd(d) and is_prime(np) then res &= np end if res = descending_primes(res,np,d-1) end for return res end function sequence r = sort(descending_primes({2})), --sequence r = descending_primes({2}), j = join_by(r,1,11," ","\n","%8d") printf(1,"There are %,d descending primes:\n%s\n",{length(r),j})
- Output:
There are 87 descending primes: 2 3 5 7 31 41 43 53 61 71 73 83 97 421 431 521 541 631 641 643 653 743 751 761 821 853 863 941 953 971 983 5431 6421 6521 7321 7541 7621 7643 8431 8521 8543 8641 8731 8741 8753 8761 9421 9431 9521 9631 9643 9721 9743 9851 9871 75431 76421 76541 76543 86531 87421 87541 87631 87641 87643 94321 96431 97651 98321 98543 98621 98641 98731 764321 865321 876431 975421 986543 987541 987631 8764321 8765321 9754321 9875321 97654321 98764321 98765431
Unsorted, ie in the order in which they are generated:
There are 87 descending primes: 2 3 31 41 421 43 431 5 521 53 541 5431 61 631 641 6421 643 6521 653 7 71 73 7321 743 751 7541 75431 761 7621 76421 7643 764321 76541 76543 821 83 8431 8521 853 8543 863 8641 86531 865321 8731 8741 87421 8753 87541 8761 87631 87641 87643 876431 8764321 8765321 941 9421 9431 94321 9521 953 9631 9643 96431 97 971 9721 9743 975421 9754321 97651 97654321 983 98321 9851 98543 98621 98641 986543 9871 98731 9875321 987541 987631 98764321 98765431
powerset
with javascript_semantics function descending_primes() sequence powerset = tagset(9), res = {} while length(powerset) do res &= filter(powerset,is_prime) sequence next = {} for i=1 to length(powerset) do for d=1 to remainder(powerset[i],10)-1 do next &= powerset[i]*10+d end for end for powerset = next end while return res end function sequence r = descending_primes(), j = join_by(r,1,11," ","\n","%8d") printf(1,"There are %,d descending primes:\n%s\n",{length(r),j})
Output same as the sorted output above, without requiring a sort.
Raku
Trivial variation of Ascending primes task.
<lang perl6>put (flat 2, 3, 5, 7, sort +*, gather (3..9).map: &recurse ).batch(10)».fmt("%8d").join: "\n";
sub recurse ($str) {
.take for ($str X~ (1, 3, 7)).grep: { .is-prime && [>] .comb }; recurse $str × 10 + $_ for 2 ..^ $str % 10;
}</lang>
- Output:
2 3 5 7 31 41 43 53 61 71 73 83 97 421 431 521 541 631 641 643 653 743 751 761 821 853 863 941 953 971 983 5431 6421 6521 7321 7541 7621 7643 8431 8521 8543 8641 8731 8741 8753 8761 9421 9431 9521 9631 9643 9721 9743 9851 9871 75431 76421 76541 76543 86531 87421 87541 87631 87641 87643 94321 96431 97651 98321 98543 98621 98641 98731 764321 865321 876431 975421 986543 987541 987631 8764321 8765321 9754321 9875321 97654321 98764321 98765431
Ring
<lang ring> load "stdlibcore.ring"
limit = 1000 row = 0
for n = 1 to limit
flag = 0 strn = string(n) if isprime(n) = 1 for m = 1 to len(strn)-1 if number(substr(strn,m)) < number(substr(strn,m+1)) flag = 1 ok next if flag = 1 row++ see "" + n + " " ok if row % 10 = 0 see nl ok ok
next
</lang>
Output:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541
547 557 563 569 571 577 587 593 599 601
607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733
739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 853 857 859 863
877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997
Wren
<lang ecmascript>import "./math" for Int import "./seq" for Lst import "./fmt" for Fmt
var powerset // recursive powerset = Fn.new { |set|
if (set.count == 0) return [[]] var head = set[0] var tail = set[1..-1] return powerset.call(tail) + powerset.call(tail).map { |s| [head] + s }
}
var ps = powerset.call((9..1).toList) var descPrimes = ps.skip(1).map { |s| Num.fromString(s.join()) }
.where { |p| Int.isPrime(p) } .toList .sort()
System.print("There are %(descPrimes.count) descending primes, namely:") for (chunk in Lst.chunks(descPrimes, 10)) Fmt.print("$8s", chunk)</lang>
- Output:
There are 87 descending primes, namely: 2 3 5 7 31 41 43 53 61 71 73 83 97 421 431 521 541 631 641 643 653 743 751 761 821 853 863 941 953 971 983 5431 6421 6521 7321 7541 7621 7643 8431 8521 8543 8641 8731 8741 8753 8761 9421 9431 9521 9631 9643 9721 9743 9851 9871 75431 76421 76541 76543 86531 87421 87541 87631 87641 87643 94321 96431 97651 98321 98543 98621 98641 98731 764321 865321 876431 975421 986543 987541 987631 8764321 8765321 9754321 9875321 97654321 98764321 98765431