Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
2
Task/Descending-primes/00-META.yaml
Normal file
2
Task/Descending-primes/00-META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
from: http://rosettacode.org/wiki/Descending_primes
|
||||
9
Task/Descending-primes/00-TASK.txt
Normal file
9
Task/Descending-primes/00-TASK.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
Generate and show all primes with strictly descending decimal digits.
|
||||
|
||||
;See also
|
||||
;* [[oeis:A052014|OEIS:A052014 - Primes with distinct digits in descending order]]
|
||||
|
||||
;Related:
|
||||
*[[Ascending primes]]
|
||||
|
||||
|
||||
32
Task/Descending-primes/11l/descending-primes-1.11l
Normal file
32
Task/Descending-primes/11l/descending-primes-1.11l
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
F is_prime(p)
|
||||
I p < 2 | p % 2 == 0
|
||||
R p == 2
|
||||
L(i) (3 .. Int(sqrt(p))).step(2)
|
||||
I p % i == 0
|
||||
R 0B
|
||||
R 1B
|
||||
|
||||
V c = 0
|
||||
V ps = [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
V nxt = [0] * 128
|
||||
|
||||
L
|
||||
V nc = 0
|
||||
L(a) ps
|
||||
I is_prime(a)
|
||||
c++
|
||||
print(‘#8’.format(a), end' I c % 5 == 0 {"\n"} E ‘ ’)
|
||||
V b = a * 10
|
||||
V l = a % 10 + b
|
||||
b++
|
||||
L b < l
|
||||
nxt[nc] = b
|
||||
nc++
|
||||
b++
|
||||
|
||||
I nc > 1
|
||||
ps = nxt[0 .< nc]
|
||||
E
|
||||
L.break
|
||||
|
||||
print("\n"c‘ descending primes found’)
|
||||
22
Task/Descending-primes/11l/descending-primes-2.11l
Normal file
22
Task/Descending-primes/11l/descending-primes-2.11l
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
F is_prime(p)
|
||||
I p < 2 | p % 2 == 0
|
||||
R p == 2
|
||||
L(i) (3 .. Int(sqrt(p))).step(2)
|
||||
I p % i == 0
|
||||
R 0B
|
||||
R 1B
|
||||
|
||||
[Int] descending_primes
|
||||
|
||||
L(n) 1 .< 2 ^ 9
|
||||
V s = ‘’
|
||||
L(i) (8 .. 0).step(-1)
|
||||
I n [&] (1 << i) != 0
|
||||
s ‘’= String(i + 1)
|
||||
I is_prime(Int(s))
|
||||
descending_primes.append(Int(s))
|
||||
|
||||
L(n) sorted(descending_primes)
|
||||
print(‘#8’.format(n), end' I (L.index + 1) % 5 == 0 {"\n"} E ‘ ’)
|
||||
|
||||
print("\n"descending_primes.len‘ descending primes found’)
|
||||
45
Task/Descending-primes/ALGOL-68/descending-primes.alg
Normal file
45
Task/Descending-primes/ALGOL-68/descending-primes.alg
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
BEGIN # find all primes with strictly decreasing digits #
|
||||
PR read "primes.incl.a68" PR # include prime utilities #
|
||||
PR read "rows.incl.a68" PR # include array utilities #
|
||||
[ 1 : 512 ]INT primes; # there will be at most 512 (2^9) primes #
|
||||
INT p count := 0; # number of primes found so far #
|
||||
FOR d1 FROM 0 TO 1 DO
|
||||
INT n1 = IF d1 = 1 THEN 9 ELSE 0 FI;
|
||||
FOR d2 FROM 0 TO 1 DO
|
||||
INT n2 = IF d2 = 1 THEN ( n1 * 10 ) + 8 ELSE n1 FI;
|
||||
FOR d3 FROM 0 TO 1 DO
|
||||
INT n3 = IF d3 = 1 THEN ( n2 * 10 ) + 7 ELSE n2 FI;
|
||||
FOR d4 FROM 0 TO 1 DO
|
||||
INT n4 = IF d4 = 1 THEN ( n3 * 10 ) + 6 ELSE n3 FI;
|
||||
FOR d5 FROM 0 TO 1 DO
|
||||
INT n5 = IF d5 = 1 THEN ( n4 * 10 ) + 5 ELSE n4 FI;
|
||||
FOR d6 FROM 0 TO 1 DO
|
||||
INT n6 = IF d6 = 1 THEN ( n5 * 10 ) + 4 ELSE n5 FI;
|
||||
FOR d7 FROM 0 TO 1 DO
|
||||
INT n7 = IF d7 = 1 THEN ( n6 * 10 ) + 3 ELSE n6 FI;
|
||||
FOR d8 FROM 0 TO 1 DO
|
||||
INT n8 = IF d8 = 1 THEN ( n7 * 10 ) + 2 ELSE n7 FI;
|
||||
FOR d9 FROM 0 TO 1 DO
|
||||
INT n9 = IF d9 = 1 THEN ( n8 * 10 ) + 1 ELSE n8 FI;
|
||||
IF n9 > 0 THEN
|
||||
IF is probably prime( n9 ) THEN
|
||||
# have a prime with strictly descending digits #
|
||||
primes[ p count +:= 1 ] := n9
|
||||
FI
|
||||
FI
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD
|
||||
OD;
|
||||
QUICKSORT primes FROMELEMENT 1 TOELEMENT p count; # sort the primes #
|
||||
# display the primes #
|
||||
FOR i TO p count DO
|
||||
print( ( " ", whole( primes[ i ], -8 ) ) );
|
||||
IF i MOD 10 = 0 THEN print( ( newline ) ) FI
|
||||
OD
|
||||
END
|
||||
35
Task/Descending-primes/AWK/descending-primes.awk
Normal file
35
Task/Descending-primes/AWK/descending-primes.awk
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# syntax: GAWK -f DESCENDING_PRIMES.AWK
|
||||
BEGIN {
|
||||
start = 1
|
||||
stop = 99999999
|
||||
for (i=start; i<=stop; i++) {
|
||||
leng = length(i)
|
||||
flag = 1
|
||||
for (j=1; j<leng; j++) {
|
||||
if (substr(i,j,1) <= substr(i,j+1,1)) {
|
||||
flag = 0
|
||||
break
|
||||
}
|
||||
}
|
||||
if (flag) {
|
||||
if (is_prime(i)) {
|
||||
printf("%9d%1s",i,++count%10?"":"\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("\n%d-%d: %d descending primes\n",start,stop,count)
|
||||
exit(0)
|
||||
}
|
||||
function is_prime(n, d) {
|
||||
d = 5
|
||||
if (n < 2) { return(0) }
|
||||
if (n % 2 == 0) { return(n == 2) }
|
||||
if (n % 3 == 0) { return(n == 3) }
|
||||
while (d*d <= n) {
|
||||
if (n % d == 0) { return(0) }
|
||||
d += 2
|
||||
if (n % d == 0) { return(0) }
|
||||
d += 4
|
||||
}
|
||||
return(1)
|
||||
}
|
||||
27
Task/Descending-primes/Arturo/descending-primes.arturo
Normal file
27
Task/Descending-primes/Arturo/descending-primes.arturo
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
descending: @[
|
||||
loop 1..9 'a [
|
||||
loop 1..dec a 'b [
|
||||
loop 1..dec b 'c [
|
||||
loop 1..dec c 'd [
|
||||
loop 1..dec d 'e [
|
||||
loop 1..dec e 'f [
|
||||
loop 1..dec f 'g [
|
||||
loop 1..dec g 'h [
|
||||
loop 1..dec h 'i -> @[a b c d e f g h i]
|
||||
@[a b c d e f g h]]
|
||||
@[a b c d e f g]]
|
||||
@[a b c d e f]]
|
||||
@[a b c d e]]
|
||||
@[a b c d]]
|
||||
@[a b c]]
|
||||
@[a b]]
|
||||
@[a]]
|
||||
]
|
||||
|
||||
descending: filter descending 'd -> some? d 'n [not? positive? n]
|
||||
descending: filter descending 'd -> d <> unique d
|
||||
descending: sort map descending 'd -> to :integer join to [:string] d
|
||||
|
||||
loop split.every:10 select descending => prime? 'row [
|
||||
print map to [:string] row 'item -> pad item 8
|
||||
]
|
||||
23
Task/Descending-primes/C++/descending-primes.cpp
Normal file
23
Task/Descending-primes/C++/descending-primes.cpp
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#include <iostream>
|
||||
|
||||
bool ispr(unsigned int n) {
|
||||
if ((n & 1) == 0 || n < 2) return n == 2;
|
||||
for (unsigned int j = 3; j * j <= n; j += 2)
|
||||
if (n % j == 0) return false; return true; }
|
||||
|
||||
int main() {
|
||||
unsigned int c = 0, nc, pc = 9, i, a, b, l,
|
||||
ps[128]{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, nxt[128];
|
||||
while (true) {
|
||||
nc = 0;
|
||||
for (i = 0; i < pc; i++) {
|
||||
if (ispr(a = ps[i]))
|
||||
printf("%8d%s", a, ++c % 5 == 0 ? "\n" : " ");
|
||||
for (b = a * 10, l = a % 10 + b++; b < l; b++)
|
||||
nxt[nc++] = b;
|
||||
}
|
||||
if (nc > 1) for(i = 0, pc = nc; i < pc; i++) ps[i] = nxt[i];
|
||||
else break;
|
||||
}
|
||||
printf("\n%d descending primes found", c);
|
||||
}
|
||||
28
Task/Descending-primes/C-sharp/descending-primes.cs
Normal file
28
Task/Descending-primes/C-sharp/descending-primes.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
|
||||
class Program {
|
||||
|
||||
static bool ispr(uint n) {
|
||||
if ((n & 1) == 0 || n < 2) return n == 2;
|
||||
for (uint j = 3; j * j <= n; j += 2)
|
||||
if (n % j == 0) return false; return true; }
|
||||
|
||||
static void Main(string[] args) {
|
||||
uint c = 0; int nc;
|
||||
var ps = new uint[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
var nxt = new uint[128];
|
||||
while (true) {
|
||||
nc = 0;
|
||||
foreach (var a in ps) {
|
||||
if (ispr(a))
|
||||
Console.Write("{0,8}{1}", a, ++c % 5 == 0 ? "\n" : " ");
|
||||
for (uint b = a * 10, l = a % 10 + b++; b < l; b++)
|
||||
nxt[nc++] = b;
|
||||
}
|
||||
if (nc > 1) {
|
||||
Array.Resize (ref ps, nc); Array.Copy(nxt, ps, nc); }
|
||||
else break;
|
||||
}
|
||||
Console.WriteLine("\n{0} descending primes found", c);
|
||||
}
|
||||
}
|
||||
24
Task/Descending-primes/C/descending-primes.c
Normal file
24
Task/Descending-primes/C/descending-primes.c
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int ispr(unsigned int n) {
|
||||
if ((n & 1) == 0 || n < 2) return n == 2;
|
||||
for (unsigned int j = 3; j * j <= n; j += 2)
|
||||
if (n % j == 0) return 0; return 1; }
|
||||
|
||||
int main() {
|
||||
unsigned int c = 0, nc, pc = 9, i, a, b, l,
|
||||
ps[128], nxt[128];
|
||||
for (a = 0, b = 1; a < pc; a = b++) ps[a] = b;
|
||||
while (1) {
|
||||
nc = 0;
|
||||
for (i = 0; i < pc; i++) {
|
||||
if (ispr(a = ps[i]))
|
||||
printf("%8d%s", a, ++c % 5 == 0 ? "\n" : " ");
|
||||
for (b = a * 10, l = a % 10 + b++; b < l; b++)
|
||||
nxt[nc++] = b;
|
||||
}
|
||||
if (nc > 1) for(i = 0, pc = nc; i < pc; i++) ps[i] = nxt[i];
|
||||
else break;
|
||||
}
|
||||
printf("\n%d descending primes found", c);
|
||||
}
|
||||
63
Task/Descending-primes/Delphi/descending-primes.delphi
Normal file
63
Task/Descending-primes/Delphi/descending-primes.delphi
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
type TProgress = procedure(Percent: integer);
|
||||
|
||||
|
||||
function IsPrime(N: integer): boolean;
|
||||
{Optimised prime test - about 40% faster than the naive approach}
|
||||
var I,Stop: integer;
|
||||
begin
|
||||
if (N = 2) or (N=3) then Result:=true
|
||||
else if (n <= 1) or ((n mod 2) = 0) or ((n mod 3) = 0) then Result:= false
|
||||
else
|
||||
begin
|
||||
I:=5;
|
||||
Stop:=Trunc(sqrt(N));
|
||||
Result:=False;
|
||||
while I<=Stop do
|
||||
begin
|
||||
if ((N mod I) = 0) or ((N mod (i + 2)) = 0) then exit;
|
||||
Inc(I,6);
|
||||
end;
|
||||
Result:=True;
|
||||
end;
|
||||
end;
|
||||
|
||||
function IsDescending(N: integer): boolean;
|
||||
{Determine if each digit is less than previous, left to right}
|
||||
var S: string;
|
||||
var I: integer;
|
||||
begin
|
||||
Result:=False;
|
||||
S:=IntToStr(N);
|
||||
for I:=1 to Length(S)-1 do
|
||||
if S[I]<=S[I+1] then exit;
|
||||
Result:=True;
|
||||
end;
|
||||
|
||||
|
||||
procedure ShowDescendingPrimes(Memo: TMemo; Prog: TProgress);
|
||||
{Write Descending primes up to 123,456,789 }
|
||||
{The Optional progress }
|
||||
var I,Cnt: integer;
|
||||
var S: string;
|
||||
const Max = 123456789;
|
||||
begin
|
||||
if Assigned(Prog) then Prog(0);
|
||||
S:='';
|
||||
Cnt:=0;
|
||||
for I:=2 to Max do
|
||||
begin
|
||||
if ((I mod 1000000)=0) and Assigned(Prog) then Prog(Trunc(100*(I/Max)));
|
||||
if IsDescending(I) and IsPrime(I) then
|
||||
begin
|
||||
S:=S+Format('%12.0n', [I*1.0]);
|
||||
Inc(Cnt);
|
||||
if (Cnt mod 8)=0 then
|
||||
begin
|
||||
Memo.Lines.Add(S);
|
||||
S:='';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if S<>'' then Memo.Lines.Add(S);
|
||||
Memo.Lines.Add('Descending Primes Found: '+IntToStr(Cnt));
|
||||
end;
|
||||
3
Task/Descending-primes/F-Sharp/descending-primes.fs
Normal file
3
Task/Descending-primes/F-Sharp/descending-primes.fs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
// Descending primes. Nigel Galloway: April 19th., 2022
|
||||
[2;3;5;7]::List.unfold(fun(n,i)->match n with []->None |_->let n=n|>List.map(fun(n,g)->[for n in n..9->(n+1,i*n+g)])|>List.concat in Some(n|>List.choose(fun(_,n)->if isPrime n then Some n else None),(n|>List.filter(fst>>(>)10),i*10)))([(4,3);(2,1);(8,7)],10)
|
||||
|>List.concat|>List.sort|>List.iter(printf "%d "); printfn ""
|
||||
6
Task/Descending-primes/Factor/descending-primes.factor
Normal file
6
Task/Descending-primes/Factor/descending-primes.factor
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
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.
|
||||
39
Task/Descending-primes/Forth/descending-primes.fth
Normal file
39
Task/Descending-primes/Forth/descending-primes.fth
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
: is-prime? \ n -- f ; \ Fast enough for this application
|
||||
DUP 1 AND IF \ n is odd
|
||||
DUP 3 DO
|
||||
DUP I DUP * < IF DROP -1 LEAVE THEN \ Leave loop if I**2 > n
|
||||
DUP I MOD 0= IF DROP 0 LEAVE THEN \ Leave loop if n%I is zero
|
||||
2 +LOOP \ iterate over odd I only
|
||||
ELSE \ n is even
|
||||
2 = \ Returns true if n == 2.
|
||||
THEN ;
|
||||
|
||||
: 1digit \ -- ; \ Select and print one digit numbers which are prime
|
||||
10 2 ?DO
|
||||
I is-prime? IF I 9 .r THEN
|
||||
LOOP ;
|
||||
|
||||
: 2digit \ n-bfwd digit -- ;
|
||||
\ Generate and print primes where least significant digit < digit
|
||||
\ n-bfwd is the base number bought foward from calls to `digits` below.
|
||||
SWAP 10 * SWAP 1 ?DO
|
||||
DUP I + is-prime? IF DUP I + 9 .r THEN
|
||||
2 I 3 = 2* - +LOOP DROP ; \ This generates the I sequence 1 3 7 9
|
||||
|
||||
: digits \ #digits n-bfwd max-digit -- ;
|
||||
\ Print descendimg primes with #digits digits.
|
||||
2 PICK 9 > IF ." #digits must be less than 10." 2DROP DROP EXIT THEN
|
||||
2 PICK 1 = IF 2DROP DROP 1digit EXIT THEN \ One digit is special simple case
|
||||
2 PICK 2 = IF \ Two digit special and
|
||||
SWAP 10 * SWAP 2 DO \ I is 2 .. max-digit-1
|
||||
DUP I + I 2digit
|
||||
LOOP 2DROP
|
||||
ELSE
|
||||
SWAP 10 * SWAP 2 PICK ?DO \ I is #digits .. max-digit-1
|
||||
DUP I + 2 PICK 1- SWAP I RECURSE \ Recurse with #digits reduced by 1.
|
||||
LOOP 2DROP
|
||||
THEN ;
|
||||
|
||||
: descending-primes
|
||||
\ Print the descending primes. Call digits with increasing #digits
|
||||
CR 9 1 DO I 0 10 digits LOOP ;
|
||||
31
Task/Descending-primes/FreeBASIC/descending-primes.basic
Normal file
31
Task/Descending-primes/FreeBASIC/descending-primes.basic
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#include "isprime.bas"
|
||||
#include "sort.bas"
|
||||
|
||||
Dim As Double t0 = Timer
|
||||
Dim As Integer i, n, tmp, num, cant
|
||||
Dim Shared As Integer matriz(512)
|
||||
For i = 0 To 511
|
||||
n = 0
|
||||
tmp = i
|
||||
num = 9
|
||||
While tmp
|
||||
If tmp And 1 Then n = n * 10 + num
|
||||
tmp = tmp Shr 1
|
||||
num -= 1
|
||||
Wend
|
||||
matriz(i) = n
|
||||
Next i
|
||||
|
||||
Sort(matriz())
|
||||
|
||||
cant = 0
|
||||
For i = 1 To Ubound(matriz)-1
|
||||
n = matriz(i)
|
||||
If IsPrime(n) Then
|
||||
Print Using "#########"; n;
|
||||
cant += 1
|
||||
If cant Mod 10 = 0 Then Print
|
||||
End If
|
||||
Next i
|
||||
Print Using !"\n\nThere are & descending primes."; cant
|
||||
Sleep
|
||||
63
Task/Descending-primes/Go/descending-primes.go
Normal file
63
Task/Descending-primes/Go/descending-primes.go
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"rcu"
|
||||
"sort"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func combinations(a []int, k int) [][]int {
|
||||
n := len(a)
|
||||
c := make([]int, k)
|
||||
var combs [][]int
|
||||
var combine func(start, end, index int)
|
||||
combine = func(start, end, index int) {
|
||||
if index == k {
|
||||
t := make([]int, len(c))
|
||||
copy(t, c)
|
||||
combs = append(combs, t)
|
||||
return
|
||||
}
|
||||
for i := start; i <= end && end-i+1 >= k-index; i++ {
|
||||
c[index] = a[i]
|
||||
combine(i+1, end, index+1)
|
||||
}
|
||||
}
|
||||
combine(0, n-1, 0)
|
||||
return combs
|
||||
}
|
||||
|
||||
func powerset(a []int) (res [][]int) {
|
||||
if len(a) == 0 {
|
||||
return
|
||||
}
|
||||
for i := 1; i <= len(a); i++ {
|
||||
res = append(res, combinations(a, i)...)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
ps := powerset([]int{9, 8, 7, 6, 5, 4, 3, 2, 1})
|
||||
var descPrimes []int
|
||||
for i := 1; i < len(ps); i++ {
|
||||
s := ""
|
||||
for _, e := range ps[i] {
|
||||
s += string(e + '0')
|
||||
}
|
||||
p, _ := strconv.Atoi(s)
|
||||
if rcu.IsPrime(p) {
|
||||
descPrimes = append(descPrimes, p)
|
||||
}
|
||||
}
|
||||
sort.Ints(descPrimes)
|
||||
fmt.Println("There are", len(descPrimes), "descending primes, namely:")
|
||||
for i := 0; i < len(descPrimes); i++ {
|
||||
fmt.Printf("%8d ", descPrimes[i])
|
||||
if (i+1)%10 == 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
5
Task/Descending-primes/J/descending-primes.j
Normal file
5
Task/Descending-primes/J/descending-primes.j
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
extend=: {{ y;y,L:0(1+each i.1-{:y)}}
|
||||
($~ q:@$)(#~ 1 p: ])10#.&>([:~.@;extend each)^:# >:i.9
|
||||
2 3 31 43 41 431 421 5 53 541 521 5431 61 653 643 641 631 6521 6421 7 73 71 761 751 743 7643 7621 7541 7321
|
||||
76543 76541 76421 75431 764321 83 863 853 821 8761 8753 8741 8731 8641 8543 8521 8431 87643 87641 87631 87541 87421 86531 876431 865321 8765321 8764321 97 983
|
||||
971 953 941 9871 9851 9743 9721 9643 9631 9521 9431 9421 98731 98641 98621 98543 98321 97651 96431 94321 987631 987541 986543 975421 9875321 9754321 98765431 98764321 97654321
|
||||
25
Task/Descending-primes/Jq/descending-primes-1.jq
Normal file
25
Task/Descending-primes/Jq/descending-primes-1.jq
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Output: a stream of the powersets of the input array
|
||||
def powersets:
|
||||
if length == 0 then .
|
||||
else .[-1] as $x
|
||||
| .[:-1] | powersets
|
||||
| ., . + [$x]
|
||||
end;
|
||||
|
||||
def is_prime:
|
||||
. as $n
|
||||
| if ($n < 2) then false
|
||||
elif ($n % 2 == 0) then $n == 2
|
||||
elif ($n % 3 == 0) then $n == 3
|
||||
elif ($n % 5 == 0) then $n == 5
|
||||
elif ($n % 7 == 0) then $n == 7
|
||||
elif ($n % 11 == 0) then $n == 11
|
||||
elif ($n % 13 == 0) then $n == 13
|
||||
elif ($n % 17 == 0) then $n == 17
|
||||
elif ($n % 19 == 0) then $n == 19
|
||||
else 23
|
||||
| until( (. * .) > $n or ($n % . == 0); .+2)
|
||||
| . * . > $n
|
||||
end;
|
||||
|
||||
def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .;
|
||||
11
Task/Descending-primes/Jq/descending-primes-2.jq
Normal file
11
Task/Descending-primes/Jq/descending-primes-2.jq
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
[range(9;0;-1)]
|
||||
| [powersets
|
||||
| map(tostring)
|
||||
| join("")
|
||||
| select(length > 0)
|
||||
| tonumber
|
||||
| select(is_prime)]
|
||||
| sort
|
||||
| _nwise(10)
|
||||
| map(lpad(9))
|
||||
| join(" ")
|
||||
9
Task/Descending-primes/Julia/descending-primes.julia
Normal file
9
Task/Descending-primes/Julia/descending-primes.julia
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
using Combinatorics
|
||||
using Primes
|
||||
|
||||
function descendingprimes()
|
||||
return sort!(filter(isprime, [evalpoly(10, x)
|
||||
for x in powerset([1, 2, 3, 4, 5, 6, 7, 8, 9]) if !isempty(x)]))
|
||||
end
|
||||
|
||||
foreach(p -> print(rpad(p[2], 10), p[1] % 10 == 0 ? "\n" : ""), enumerate(descendingprimes()))
|
||||
24
Task/Descending-primes/Lua/descending-primes.lua
Normal file
24
Task/Descending-primes/Lua/descending-primes.lua
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
local function is_prime(n)
|
||||
if n < 2 then return false end
|
||||
if n % 2 == 0 then return n==2 end
|
||||
if n % 3 == 0 then return n==3 end
|
||||
for f = 5, n^0.5, 6 do
|
||||
if n%f==0 or n%(f+2)==0 then return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function descending_primes()
|
||||
local digits, candidates, primes = {9,8,7,6,5,4,3,2,1}, {0}, {}
|
||||
for i = 1, #digits do
|
||||
for j = 1, #candidates do
|
||||
local value = candidates[j] * 10 + digits[i]
|
||||
if is_prime(value) then primes[#primes+1] = value end
|
||||
candidates[#candidates+1] = value
|
||||
end
|
||||
end
|
||||
table.sort(primes)
|
||||
return primes
|
||||
end
|
||||
|
||||
print(table.concat(descending_primes(), ", "))
|
||||
|
|
@ -0,0 +1 @@
|
|||
Sort[Select[FromDigits/@Subsets[Range[9,1,-1],{1,\[Infinity]}],PrimeQ]]
|
||||
40
Task/Descending-primes/Nim/descending-primes.nim
Normal file
40
Task/Descending-primes/Nim/descending-primes.nim
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import std/[strutils, sugar]
|
||||
|
||||
proc isPrime(n: int): bool =
|
||||
assert n > 7
|
||||
if n mod 2 == 0 or n mod 3 == 0: return false
|
||||
var d = 5
|
||||
var step = 2
|
||||
while d * d <= n:
|
||||
if n mod d == 0:
|
||||
return false
|
||||
inc d, step
|
||||
step = 6 - step
|
||||
result = true
|
||||
|
||||
iterator descendingPrimes(): int =
|
||||
|
||||
# Yield one digit primes.
|
||||
for n in [2, 3, 5, 7]:
|
||||
yield n
|
||||
|
||||
# Yield other primes by increasing length and in ascending order.
|
||||
type Item = tuple[val, lastDigit: int]
|
||||
var items: seq[Item] = collect(for n in 1..9: (n, n))
|
||||
for ndigits in 2..9:
|
||||
var nextItems: seq[Item]
|
||||
for item in items:
|
||||
for newDigit in 0..(item.lastDigit - 1):
|
||||
let newVal = 10 * item.val + newDigit
|
||||
nextItems.add (val: newVal, lastDigit: newDigit)
|
||||
if newVal.isPrime():
|
||||
yield newVal
|
||||
items = move(nextItems)
|
||||
|
||||
|
||||
var rank = 0
|
||||
for prime in descendingPrimes():
|
||||
inc rank
|
||||
stdout.write ($prime).align(8)
|
||||
stdout.write if rank mod 8 == 0: '\n' else: ' '
|
||||
echo()
|
||||
10
Task/Descending-primes/Perl/descending-primes.pl
Normal file
10
Task/Descending-primes/Perl/descending-primes.pl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use ntheory 'is_prime';
|
||||
|
||||
print join( '',
|
||||
sort
|
||||
map { sprintf '%9d', $_ }
|
||||
grep /./ && is_prime $_,
|
||||
glob join '', map "{$_,}", reverse 1..9
|
||||
) =~ s/.{45}\K/\n/gr;
|
||||
16
Task/Descending-primes/Phix/descending-primes-1.phix
Normal file
16
Task/Descending-primes/Phix/descending-primes-1.phix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">descending_primes</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">p</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">max_digit</span><span style="color: #0000FF;">=</span><span style="color: #000000;">9</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">max_digit</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">np</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">p</span><span style="color: #0000FF;">*</span><span style="color: #000000;">10</span><span style="color: #0000FF;">+</span><span style="color: #000000;">d</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">odd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #7060A8;">is_prime</span><span style="color: #0000FF;">(</span><span style="color: #000000;">np</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">np</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">descending_primes</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">np</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">r</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">descending_primes</span><span style="color: #0000FF;">({</span><span style="color: #000000;">2</span><span style="color: #0000FF;">})),</span>
|
||||
<span style="color: #000080;font-style:italic;">--sequence r = descending_primes({2}),</span>
|
||||
<span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">join_by</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%8d"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"There are %,d descending primes:\n%s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">),</span><span style="color: #000000;">j</span><span style="color: #0000FF;">})</span>
|
||||
<!--
|
||||
22
Task/Descending-primes/Phix/descending-primes-2.phix
Normal file
22
Task/Descending-primes/Phix/descending-primes-2.phix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">descending_primes</span><span style="color: #0000FF;">()</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">powerset</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">9</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
|
||||
<span style="color: #008080;">while</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powerset</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">res</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">filter</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powerset</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">is_prime</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">next</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powerset</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powerset</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #000000;">10</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">next</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">powerset</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">10</span><span style="color: #0000FF;">+</span><span style="color: #000000;">d</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #000000;">powerset</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">next</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">r</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">descending_primes</span><span style="color: #0000FF;">(),</span>
|
||||
<span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">join_by</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%8d"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"There are %,d descending primes:\n%s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">),</span><span style="color: #000000;">j</span><span style="color: #0000FF;">})</span>
|
||||
<!--
|
||||
9
Task/Descending-primes/Picat/descending-primes.picat
Normal file
9
Task/Descending-primes/Picat/descending-primes.picat
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
import util.
|
||||
|
||||
main =>
|
||||
DP = [N : S in power_set("987654321"), S != [], N = S.to_int, prime(N)].sort,
|
||||
foreach({P,I} in zip(DP,1..DP.len))
|
||||
printf("%9d%s",P,cond(I mod 10 == 0,"\n",""))
|
||||
end,
|
||||
nl,
|
||||
println(len=DP.len).
|
||||
11
Task/Descending-primes/Python/descending-primes.py
Normal file
11
Task/Descending-primes/Python/descending-primes.py
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
from sympy import isprime
|
||||
|
||||
def descending(xs=range(10)):
|
||||
for x in xs:
|
||||
yield x
|
||||
yield from descending(x*10 + d for d in range(x%10))
|
||||
|
||||
for i, p in enumerate(sorted(filter(isprime, descending()))):
|
||||
print(f'{p:9d}', end=' ' if (1 + i)%8 else '\n')
|
||||
|
||||
print()
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[ 0 swap witheach
|
||||
[ swap 10 * + ] ] is digits->n ( [ --> n )
|
||||
|
||||
[]
|
||||
' [ 9 8 7 6 5 4 3 2 1 ] powerset
|
||||
witheach
|
||||
[ digits->n dup isprime
|
||||
iff join else drop ]
|
||||
sort echo
|
||||
6
Task/Descending-primes/Raku/descending-primes.raku
Normal file
6
Task/Descending-primes/Raku/descending-primes.raku
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
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;
|
||||
}
|
||||
40
Task/Descending-primes/Ring/descending-primes.ring
Normal file
40
Task/Descending-primes/Ring/descending-primes.ring
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
show("decending primes", sort(cending_primes(seq(9, 1))))
|
||||
|
||||
func show(title, itm)
|
||||
l = len(itm); ? "" + l + " " + title + ":"
|
||||
for i = 1 to l
|
||||
see fmt(itm[i], 9)
|
||||
if i % 5 = 0 and i < l? "" ok
|
||||
next : ? ""
|
||||
|
||||
func seq(b, e)
|
||||
res = []; d = e - b
|
||||
s = d / fabs(d)
|
||||
for i = b to e step s add(res, i) next
|
||||
return res
|
||||
|
||||
func ispr(n)
|
||||
if n < 2 return 0 ok
|
||||
if n & 1 = 0 return n = 2 ok
|
||||
if n % 3 = 0 return n = 3 ok
|
||||
l = sqrt(n)
|
||||
for f = 5 to l
|
||||
if n % f = 0 or n % (f + 2) = 0 return false ok
|
||||
next : return 1
|
||||
|
||||
func cending_primes(digs)
|
||||
cand = [0]
|
||||
pr = []
|
||||
for i in digs
|
||||
lcand = cand
|
||||
for j in lcand
|
||||
v = j * 10 + i
|
||||
if ispr(v) add(pr, v) ok
|
||||
add(cand, v)
|
||||
next
|
||||
next
|
||||
return pr
|
||||
|
||||
func fmt(x, l)
|
||||
res = " " + x
|
||||
return right(res, l)
|
||||
11
Task/Descending-primes/Ruby/descending-primes.rb
Normal file
11
Task/Descending-primes/Ruby/descending-primes.rb
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
require 'prime'
|
||||
|
||||
digits = [9,8,7,6,5,4,3,2,1].to_a
|
||||
res = 1.upto(digits.size).flat_map do |n|
|
||||
digits.combination(n).filter_map do |set|
|
||||
candidate = set.join.to_i
|
||||
candidate if candidate.prime?
|
||||
end.reverse
|
||||
end
|
||||
|
||||
puts res.join(",")
|
||||
30
Task/Descending-primes/Sidef/descending-primes.sidef
Normal file
30
Task/Descending-primes/Sidef/descending-primes.sidef
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
func primes_with_descending_digits(base = 10) {
|
||||
|
||||
var list = []
|
||||
var digits = @(1..^base)
|
||||
|
||||
var end_digits = digits.grep { .is_coprime(base) }
|
||||
list << digits.grep { .is_prime && !.is_coprime(base) }...
|
||||
|
||||
for k in (0 .. digits.end) {
|
||||
digits.combinations(k, {|*a|
|
||||
var v = a.digits2num(base)
|
||||
end_digits.each {|d|
|
||||
var n = (v*base + d)
|
||||
next if ((n >= base) && (a[0] <= d))
|
||||
list << n if n.is_prime
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
list.sort
|
||||
}
|
||||
|
||||
var base = 10
|
||||
var arr = primes_with_descending_digits(base)
|
||||
|
||||
say "There are #{arr.len} descending primes in base #{base}.\n"
|
||||
|
||||
arr.each_slice(8, {|*a|
|
||||
say a.map { '%9s' % _ }.join(' ')
|
||||
})
|
||||
12
Task/Descending-primes/Wren/descending-primes.wren
Normal file
12
Task/Descending-primes/Wren/descending-primes.wren
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import "./perm" for Powerset
|
||||
import "./math" for Int
|
||||
import "./seq" for Lst
|
||||
import "./fmt" for Fmt
|
||||
|
||||
var ps = Powerset.list((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)
|
||||
25
Task/Descending-primes/XPL0/descending-primes.xpl0
Normal file
25
Task/Descending-primes/XPL0/descending-primes.xpl0
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
include xpllib; \provides IsPrime and Sort
|
||||
|
||||
int I, N, Mask, Digit, A(512), Cnt;
|
||||
[for I:= 0 to 511 do
|
||||
[N:= 0; Mask:= I; Digit:= 9;
|
||||
while Mask do
|
||||
[if Mask&1 then
|
||||
N:= N*10 + Digit;
|
||||
Mask:= Mask>>1;
|
||||
Digit:= Digit-1;
|
||||
];
|
||||
A(I):= N;
|
||||
];
|
||||
Sort(A, 512);
|
||||
Cnt:= 0;
|
||||
Format(9, 0);
|
||||
for I:= 1 to 511 do \skip empty set
|
||||
[N:= A(I);
|
||||
if IsPrime(N) then
|
||||
[RlOut(0, float(N));
|
||||
Cnt:= Cnt+1;
|
||||
if rem(Cnt/10) = 0 then CrLf(0);
|
||||
];
|
||||
];
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue