Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
3
Task/Motzkin-numbers/00-META.yaml
Normal file
3
Task/Motzkin-numbers/00-META.yaml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
from: http://rosettacode.org/wiki/Motzkin_numbers
|
||||
note: Prime Numbers
|
||||
14
Task/Motzkin-numbers/00-TASK.txt
Normal file
14
Task/Motzkin-numbers/00-TASK.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
;Definition
|
||||
The '''n'''th [https://en.wikipedia.org/wiki/Motzkin_number Motzkin number] (denoted by M[n]) is the number of different ways of drawing non-intersecting chords between '''n''' points on a circle (not necessarily touching every point by a chord).
|
||||
|
||||
By convention M[0] = 1.
|
||||
|
||||
|
||||
;Task
|
||||
Compute and show on this page the first '''42''' Motzkin numbers or, if your language does not support 64 bit integers, as many such numbers as you can. Indicate which of these numbers are prime.
|
||||
|
||||
|
||||
;See also
|
||||
* [[oeis:A001006]] Motzkin numbers
|
||||
<br><br>
|
||||
|
||||
51
Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg
Normal file
51
Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
BEGIN # find some Motzkin numbers #
|
||||
PR read "primes.incl.a68" PR
|
||||
# returns a table of the Motzkin numbers 0 .. n #
|
||||
OP MOTZKIN = ( INT n )[]LONG LONG INT:
|
||||
BEGIN
|
||||
[ 0 : n ]LONG LONG INT m;
|
||||
IF n >= 0 THEN
|
||||
m[ 0 ] := 1;
|
||||
IF n >= 1 THEN
|
||||
m[ 1 ] := 1;
|
||||
FOR i FROM 2 TO UPB m DO
|
||||
m[ i ] := ( ( m[ i - 1 ] * ( ( 2 * i ) + 1 ) )
|
||||
+ ( m[ i - 2 ] * ( ( 3 * i ) - 3 ) )
|
||||
)
|
||||
OVER ( i + 2 )
|
||||
OD
|
||||
FI
|
||||
FI;
|
||||
m
|
||||
END # MOTZKIN # ;
|
||||
# returns a string representation of n with commas #
|
||||
PROC commatise = ( LONG LONG INT n )STRING:
|
||||
BEGIN
|
||||
STRING result := "";
|
||||
STRING unformatted = whole( n, 0 );
|
||||
INT ch count := 0;
|
||||
FOR c FROM UPB unformatted BY -1 TO LWB unformatted DO
|
||||
IF ch count <= 2 THEN ch count +:= 1
|
||||
ELSE ch count := 1; "," +=: result
|
||||
FI;
|
||||
unformatted[ c ] +=: result
|
||||
OD;
|
||||
result
|
||||
END; # commatise #
|
||||
# left-pads a string to at least n characters #
|
||||
PROC pad left = ( STRING s, INT n )STRING:
|
||||
IF INT len = ( UPB s - LWB s ) + 1; len >= n THEN s ELSE ( ( n - len ) * " " ) + s FI;
|
||||
|
||||
# show the Motzkin numbers #
|
||||
print( ( " n M[n] Prime?", newline ) );
|
||||
print( ( "-----------------------------------", newline ) );
|
||||
[]LONG LONG INT m = MOTZKIN 41;
|
||||
FOR i FROM LWB m TO UPB m DO
|
||||
print( ( whole( i, -2 )
|
||||
, pad left( commatise( m[ i ] ), 26 )
|
||||
, IF is probably prime( m[ i ] ) THEN " prime" ELSE "" FI
|
||||
, newline
|
||||
)
|
||||
)
|
||||
OD
|
||||
END
|
||||
24
Task/Motzkin-numbers/AWK/motzkin-numbers.awk
Normal file
24
Task/Motzkin-numbers/AWK/motzkin-numbers.awk
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# syntax: GAWK --bignum -f MOTZKIN_NUMBERS.AWK
|
||||
BEGIN {
|
||||
print(" n Motzkin[n] prime")
|
||||
limit = 41
|
||||
m[0] = m[1] = 1
|
||||
for (i=2; i<=limit; i++) {
|
||||
m[i] = (m[i-1]*(2*i+1) + m[i-2]*(3*i-3)) / (i + 2)
|
||||
}
|
||||
for (i=0; i<=limit; i++) {
|
||||
printf("%2d %18d %3d\n",i,m[i],is_prime(m[i]))
|
||||
}
|
||||
exit(0)
|
||||
}
|
||||
function is_prime(x, i) {
|
||||
if (x <= 1) {
|
||||
return(0)
|
||||
}
|
||||
for (i=2; i<=int(sqrt(x)); i++) {
|
||||
if (x % i == 0) {
|
||||
return(0)
|
||||
}
|
||||
}
|
||||
return(1)
|
||||
}
|
||||
26
Task/Motzkin-numbers/Arturo/motzkin-numbers.arturo
Normal file
26
Task/Motzkin-numbers/Arturo/motzkin-numbers.arturo
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
motzkin: function [n][
|
||||
result: array.of:n+1 0
|
||||
result\[0]: 1
|
||||
result\[1]: 1
|
||||
|
||||
loop 2..n 'i ->
|
||||
result\[i]: ((result\[i-1] * (inc 2*i)) + result\[i-2] * (sub 3*i 3)) / i+2
|
||||
|
||||
return result
|
||||
]
|
||||
|
||||
printLine: function [items][
|
||||
pads: [4 20 7]
|
||||
loop.with:'i items 'item [
|
||||
prints pad to :string item pads\[i]
|
||||
]
|
||||
print ""
|
||||
]
|
||||
|
||||
motzkins: motzkin 41
|
||||
|
||||
printLine ["n" "M[n]" "prime"]
|
||||
print repeat "=" 31
|
||||
|
||||
loop.with:'i motzkins 'm ->
|
||||
printLine @[i m prime? m]
|
||||
21
Task/Motzkin-numbers/BASIC256/motzkin-numbers.basic
Normal file
21
Task/Motzkin-numbers/BASIC256/motzkin-numbers.basic
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
dim M(42)
|
||||
M[0] = 1 : M[1] = 1
|
||||
print rjust("1",18) : print rjust("1",18)
|
||||
|
||||
for n = 2 to 41
|
||||
M[n] = M[n-1]
|
||||
for i = 0 to n-2
|
||||
M[n] += M[i]*M[n-2-i]
|
||||
next i
|
||||
print rjust(string(M[n]),18); chr(9);
|
||||
if isPrime(M[n]) then print "is a prime" else print
|
||||
next n
|
||||
end
|
||||
|
||||
function isPrime(v)
|
||||
if v <= 1 then return False
|
||||
for i = 2 to int(sqr(v))
|
||||
if v % i = 0 then return False
|
||||
next i
|
||||
return True
|
||||
end function
|
||||
1
Task/Motzkin-numbers/Burlesque/motzkin-numbers.blq
Normal file
1
Task/Motzkin-numbers/Burlesque/motzkin-numbers.blq
Normal file
|
|
@ -0,0 +1 @@
|
|||
41rz{{2./}c!rz2?*{nr}c!\/2?/{JJ2.*J#Rnr#r\/+.nr.-}m[?*++it+.}m[Jp^#R{~]}5E!{fCL[1==}f[#r
|
||||
50
Task/Motzkin-numbers/C++/motzkin-numbers.cpp
Normal file
50
Task/Motzkin-numbers/C++/motzkin-numbers.cpp
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#include <cstdint>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
|
||||
bool is_prime(uint64_t n) {
|
||||
if (n < 2)
|
||||
return false;
|
||||
if (n % 2 == 0)
|
||||
return n == 2;
|
||||
if (n % 3 == 0)
|
||||
return n == 3;
|
||||
for (uint64_t p = 5; p * p <= n; p += 4) {
|
||||
if (n % p == 0)
|
||||
return false;
|
||||
p += 2;
|
||||
if (n % p == 0)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
class motzkin_generator {
|
||||
public:
|
||||
uint64_t next();
|
||||
private:
|
||||
uint64_t n = 0;
|
||||
uint64_t m0 = 1;
|
||||
uint64_t m1 = 1;
|
||||
};
|
||||
|
||||
uint64_t motzkin_generator::next() {
|
||||
uint64_t m = n > 1 ? (m1 * (2 * n + 1) + m0 * (3 * n - 3)) / (n + 2) : 1;
|
||||
++n;
|
||||
m0 = m1;
|
||||
m1 = m;
|
||||
return m;
|
||||
}
|
||||
|
||||
int main() {
|
||||
std::cout.imbue(std::locale(""));
|
||||
std::cout << " n M(n) Prime?\n";
|
||||
std::cout << "-----------------------------------\n";
|
||||
std::cout << std::boolalpha;
|
||||
motzkin_generator mgen;
|
||||
for (int i = 0; i < 42; ++i) {
|
||||
uint64_t n = mgen.next();
|
||||
std::cout << std::setw(2) << i << std::setw(25) << n << " "
|
||||
<< is_prime(n) << '\n';
|
||||
}
|
||||
}
|
||||
29
Task/Motzkin-numbers/C-sharp/motzkin-numbers.cs
Normal file
29
Task/Motzkin-numbers/C-sharp/motzkin-numbers.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using BI = System.Numerics.BigInteger;
|
||||
|
||||
class Program {
|
||||
|
||||
// has multiple factors (other than 1 and x)
|
||||
static bool hmf(BI x) {
|
||||
if (x < 4) return x == 1;
|
||||
if ((x & 1) == 0 || x % 3 == 0) return true;
|
||||
int l = (int)Math.Sqrt((double)x); // this limit works because the 40th to 80th Motzkin numbers have factors of 2 or 3
|
||||
for (int j = 5, d = 4; j <= l; j += d = 6 - d)
|
||||
if (x % j == 0) return x > j;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void Main(string[] args) {
|
||||
BI a = 0, b = 1, t;
|
||||
int n = 1, s = 0, d = 1, c = 0, f = 1;
|
||||
while (n <= 80)
|
||||
Console.WriteLine("{0,46:n0} {1}",
|
||||
t = b / n++,
|
||||
hmf(t) ? "" : "is prime.",
|
||||
t = b,
|
||||
b = ((c += d * 3 + 3) * a +
|
||||
(f += d * 2 + 3) * b) /
|
||||
(s += d += 2),
|
||||
a = t);
|
||||
}
|
||||
}
|
||||
35
Task/Motzkin-numbers/C/motzkin-numbers.c
Normal file
35
Task/Motzkin-numbers/C/motzkin-numbers.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#include <locale.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
bool is_prime(uint64_t n) {
|
||||
if (n < 2)
|
||||
return false;
|
||||
if (n % 2 == 0)
|
||||
return n == 2;
|
||||
if (n % 3 == 0)
|
||||
return n == 3;
|
||||
for (uint64_t p = 5; p * p <= n; p += 4) {
|
||||
if (n % p == 0)
|
||||
return false;
|
||||
p += 2;
|
||||
if (n % p == 0)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main() {
|
||||
setlocale(LC_ALL, "");
|
||||
printf(" n M(n) Prime?\n");
|
||||
printf("-----------------------------------\n");
|
||||
uint64_t m0 = 1, m1 = 1;
|
||||
for (uint64_t i = 0; i < 42; ++i) {
|
||||
uint64_t m =
|
||||
i > 1 ? (m1 * (2 * i + 1) + m0 * (3 * i - 3)) / (i + 2) : 1;
|
||||
printf("%2llu%'25llu %s\n", i, m, is_prime(m) ? "true" : "false");
|
||||
m0 = m1;
|
||||
m1 = m;
|
||||
}
|
||||
}
|
||||
29
Task/Motzkin-numbers/Dart/motzkin-numbers.dart
Normal file
29
Task/Motzkin-numbers/Dart/motzkin-numbers.dart
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import 'dart:math';
|
||||
|
||||
void main() {
|
||||
var M = List<int>.filled(42, 1);
|
||||
M[0] = 1;
|
||||
M[1] = 1;
|
||||
print('1');
|
||||
print('1');
|
||||
for (int n = 2; n < 42; ++n) {
|
||||
M[n] = M[n - 1];
|
||||
for (int i = 0; i <= n - 2; ++i) {
|
||||
M[n] += M[i] * M[n - 2 - i];
|
||||
}
|
||||
if (isPrime(M[n])) {
|
||||
print('${M[n]} is a prime');
|
||||
} else {
|
||||
print('${M[n]}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool isPrime(int n) {
|
||||
if (n <= 1) return false;
|
||||
if (n == 2) return true;
|
||||
for (int i = 2; i <= sqrt(n); ++i) {
|
||||
if (n % i == 0) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
23
Task/Motzkin-numbers/EMal/motzkin-numbers.emal
Normal file
23
Task/Motzkin-numbers/EMal/motzkin-numbers.emal
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
fun isPrime = logic by int n
|
||||
if n <= 1 do return false end
|
||||
for int i = 2; i <= int!sqrt(n); ++i
|
||||
if n % i == 0 do return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
fun format = text by var n, int max do return " " * (max - length(text!n)) + n end
|
||||
fun motzkin = List by int n
|
||||
List m = int[].with(n)
|
||||
m[0] = 1
|
||||
m[1] = 1
|
||||
for int i = 2; i < m.length; ++i
|
||||
m[i] = (m[i - 1] * (2 * i + 1) + m[i - 2] * (3 * i - 3)) / (i + 2)
|
||||
end
|
||||
return m
|
||||
end
|
||||
int n = 0
|
||||
writeLine(format("n", 2) + format("motzkin(n)", 20) + format("prime", 6))
|
||||
for each int m in motzkin(42)
|
||||
writeLine(format(n, 2) + format(m, 20) + format(isPrime(m), 4))
|
||||
++n
|
||||
end
|
||||
3
Task/Motzkin-numbers/F-Sharp/motzkin-numbers.fs
Normal file
3
Task/Motzkin-numbers/F-Sharp/motzkin-numbers.fs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
// Motzkin numbers. Nigel Galloway: September 10th., 2021
|
||||
let M=let rec fN g=seq{yield List.item 1 g; yield! fN(0L::(g|>List.windowed 3|>List.map(List.sum))@[0L;0L])} in fN [0L;1L;0L;0L]
|
||||
M|>Seq.take 42|>Seq.iter(printfn "%d")
|
||||
21
Task/Motzkin-numbers/Factor/motzkin-numbers.factor
Normal file
21
Task/Motzkin-numbers/Factor/motzkin-numbers.factor
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
USING: combinators formatting io kernel math math.primes
|
||||
tools.memory.private ;
|
||||
|
||||
MEMO: motzkin ( m -- n )
|
||||
dup 2 < [
|
||||
drop 1
|
||||
] [
|
||||
{
|
||||
[ 2 * 1 + ]
|
||||
[ 1 - motzkin * ]
|
||||
[ 3 * 3 - ]
|
||||
[ 2 - motzkin * + ]
|
||||
[ 2 + /i ]
|
||||
} cleave
|
||||
] if ;
|
||||
|
||||
" n motzkin(n)\n" print
|
||||
42 [
|
||||
dup motzkin [ commas ] keep prime? "prime" "" ?
|
||||
"%2d %24s %s\n" printf
|
||||
] each-integer
|
||||
14
Task/Motzkin-numbers/Fermat/motzkin-numbers.fermat
Normal file
14
Task/Motzkin-numbers/Fermat/motzkin-numbers.fermat
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Array m[42];
|
||||
m[1]:=1;
|
||||
m[2]:=2;
|
||||
!!(1,0); {precompute and print m[0] thru m[2]}
|
||||
!!(1,0);
|
||||
!!(2,1);
|
||||
for n=3 to 41 do
|
||||
m[n]:=(m[n-1]*(2*n+1) + m[n-2]*(3*n-3))/(n+2);
|
||||
!!(m[n],Isprime(m[n]));
|
||||
od;
|
||||
|
||||
; {built-in Isprime function returns 0 for 1, 1 for primes, and}
|
||||
; {the smallest prime factor for composites, so this actually gives}
|
||||
; {slightly more information than requested}
|
||||
13
Task/Motzkin-numbers/FreeBASIC/motzkin-numbers.basic
Normal file
13
Task/Motzkin-numbers/FreeBASIC/motzkin-numbers.basic
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#include "isprime.bas"
|
||||
|
||||
dim as ulongint M(0 to 41)
|
||||
M(0) = 1 : M(1) = 1
|
||||
print "1" : print "1"
|
||||
for n as integer = 2 to 41
|
||||
M(n) = M(n-1)
|
||||
for i as uinteger = 0 to n-2
|
||||
M(n) += M(i)*M(n-2-i)
|
||||
next i
|
||||
print M(n),
|
||||
if isprime(M(n)) then print "is a prime" else print
|
||||
next n
|
||||
25
Task/Motzkin-numbers/Go/motzkin-numbers.go
Normal file
25
Task/Motzkin-numbers/Go/motzkin-numbers.go
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"rcu"
|
||||
)
|
||||
|
||||
func motzkin(n int) []int {
|
||||
m := make([]int, n+1)
|
||||
m[0] = 1
|
||||
m[1] = 1
|
||||
for i := 2; i <= n; i++ {
|
||||
m[i] = (m[i-1]*(2*i+1) + m[i-2]*(3*i-3)) / (i + 2)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(" n M[n] Prime?")
|
||||
fmt.Println("-----------------------------------")
|
||||
m := motzkin(41)
|
||||
for i, e := range m {
|
||||
fmt.Printf("%2d %23s %t\n", i, rcu.Commatize(e), rcu.IsPrime(e))
|
||||
}
|
||||
}
|
||||
31
Task/Motzkin-numbers/Haskell/motzkin-numbers.hs
Normal file
31
Task/Motzkin-numbers/Haskell/motzkin-numbers.hs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import Control.Monad.Memo (Memo, memo, startEvalMemo)
|
||||
import Math.NumberTheory.Primes.Testing (isPrime)
|
||||
import System.Environment (getArgs)
|
||||
import Text.Printf (printf)
|
||||
|
||||
type I = Integer
|
||||
|
||||
-- The n'th Motzkin number, where n is assumed to be ≥ 0. We memoize the
|
||||
-- computations using MonadMemo.
|
||||
motzkin :: I -> Memo I I I
|
||||
motzkin 0 = return 1
|
||||
motzkin 1 = return 1
|
||||
motzkin n = do
|
||||
m1 <- memo motzkin (n-1)
|
||||
m2 <- memo motzkin (n-2)
|
||||
return $ ((2*n+1)*m1 + (3*n-3)*m2) `div` (n+2)
|
||||
|
||||
-- The first n+1 Motzkin numbers, starting at 0.
|
||||
motzkins :: I -> [I]
|
||||
motzkins = startEvalMemo . mapM motzkin . enumFromTo 0
|
||||
|
||||
-- For i = 0 to n print i, the i'th Motzkin number, and if it's a prime number.
|
||||
printMotzkins :: I -> IO ()
|
||||
printMotzkins n = mapM_ prnt $ zip [0 :: I ..] (motzkins n)
|
||||
where prnt (i, m) = printf "%2d %20d %s\n" i m $ prime m
|
||||
prime m = if isPrime m then "prime" else ""
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
[n] <- map read <$> getArgs
|
||||
printMotzkins n
|
||||
1
Task/Motzkin-numbers/J/motzkin-numbers-1.j
Normal file
1
Task/Motzkin-numbers/J/motzkin-numbers-1.j
Normal file
|
|
@ -0,0 +1 @@
|
|||
nextMotzkin=: , (({:*1+2*#) + _2&{*3*#-1:)%2+#
|
||||
43
Task/Motzkin-numbers/J/motzkin-numbers-2.j
Normal file
43
Task/Motzkin-numbers/J/motzkin-numbers-2.j
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
(":,.' ',.('prime'#~ 1&p:@{.)"1) ,.nextMotzkin^:40(1 1x)
|
||||
1
|
||||
1
|
||||
2 prime
|
||||
4
|
||||
9
|
||||
21
|
||||
51
|
||||
127 prime
|
||||
323
|
||||
835
|
||||
2188
|
||||
5798
|
||||
15511 prime
|
||||
41835
|
||||
113634
|
||||
310572
|
||||
853467
|
||||
2356779
|
||||
6536382
|
||||
18199284
|
||||
50852019
|
||||
142547559
|
||||
400763223
|
||||
1129760415
|
||||
3192727797
|
||||
9043402501
|
||||
25669818476
|
||||
73007772802
|
||||
208023278209
|
||||
593742784829
|
||||
1697385471211
|
||||
4859761676391
|
||||
13933569346707
|
||||
40002464776083
|
||||
114988706524270
|
||||
330931069469828
|
||||
953467954114363 prime
|
||||
2750016719520991
|
||||
7939655757745265
|
||||
22944749046030949
|
||||
66368199913921497
|
||||
192137918101841817
|
||||
43
Task/Motzkin-numbers/Java/motzkin-numbers.java
Normal file
43
Task/Motzkin-numbers/Java/motzkin-numbers.java
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import java.math.BigInteger;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public final class MotzkinNumbers {
|
||||
|
||||
public static void main(String[] aArgs) {
|
||||
final int count = 42;
|
||||
List<BigInteger> motzkins = motzkinNumbers(count);
|
||||
|
||||
NumberFormat ukNumberFormat = NumberFormat.getInstance(Locale.UK);
|
||||
|
||||
System.out.println(" n Motzkin[n]");
|
||||
System.out.println("-----------------------------");
|
||||
|
||||
for ( int n = 0; n < count; n++ ) {
|
||||
BigInteger motzkin = motzkins.get(n);
|
||||
boolean prime = motzkin.isProbablePrime(PROBABILITY);
|
||||
System.out.print(String.format("%2d %23s", n, ukNumberFormat.format(motzkin)));
|
||||
System.out.println( prime ? " prime" : "" );
|
||||
}
|
||||
}
|
||||
|
||||
private static List<BigInteger> motzkinNumbers(int aSize) {
|
||||
List<BigInteger> result = new ArrayList<BigInteger>(aSize);
|
||||
result.add(BigInteger.ONE);
|
||||
result.add(BigInteger.ONE);
|
||||
for ( int i = 2; i < aSize; i++ ) {
|
||||
BigInteger nextMotzkin = result.get(i - 1).multiply(BigInteger.valueOf(2 * i + 1))
|
||||
.add(result.get(i - 2).multiply(BigInteger.valueOf(3 * i - 3)))
|
||||
.divide(BigInteger.valueOf(i + 2));
|
||||
|
||||
result.add(nextMotzkin);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static final int PROBABILITY = 20;
|
||||
|
||||
}
|
||||
16
Task/Motzkin-numbers/Jq/motzkin-numbers.jq
Normal file
16
Task/Motzkin-numbers/Jq/motzkin-numbers.jq
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .;
|
||||
|
||||
def motzkin:
|
||||
. as $n
|
||||
| reduce range(2; $n+1) as $i (
|
||||
{m: [1,1]};
|
||||
.m[$i] = (.m[$i-1] * (2*$i + 1) + .m[$i-2] * (3*$i -3))/($i + 2))
|
||||
| .m ;
|
||||
|
||||
|
||||
" n M[n] Prime?",
|
||||
"------------------------------",
|
||||
|
||||
(41 | motzkin
|
||||
| range(0;length) as $i
|
||||
|"\($i|lpad(2)) \(.[$i]|lpad(20)) \(.[$i]|if is_prime then "prime" else "" end)")
|
||||
15
Task/Motzkin-numbers/Julia/motzkin-numbers.julia
Normal file
15
Task/Motzkin-numbers/Julia/motzkin-numbers.julia
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
using Primes
|
||||
|
||||
function motzkin(N)
|
||||
m = zeros(Int, N)
|
||||
m[1] = m[2] = 1
|
||||
for i in 3:N
|
||||
m[i] = (m[i - 1] * (2i - 1) + m[i - 2] * (3i - 6)) ÷ (i + 1)
|
||||
end
|
||||
return m
|
||||
end
|
||||
|
||||
println(" n M[n] Prime?\n-----------------------------------")
|
||||
for (i, m) in enumerate(motzkin(42))
|
||||
println(lpad(i - 1, 2), lpad(m, 20), lpad(isprime(m), 8))
|
||||
end
|
||||
1
Task/Motzkin-numbers/Mathematica/motzkin-numbers.math
Normal file
1
Task/Motzkin-numbers/Mathematica/motzkin-numbers.math
Normal file
|
|
@ -0,0 +1 @@
|
|||
Table[With[{o = Hypergeometric2F1[(1 - n)/2, -n/2, 2, 4]}, {n, o, PrimeQ[o]}], {n, 0, 41}] // Grid
|
||||
26
Task/Motzkin-numbers/Nim/motzkin-numbers.nim
Normal file
26
Task/Motzkin-numbers/Nim/motzkin-numbers.nim
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import strformat, strutils
|
||||
|
||||
func isPrime(n: Positive): bool =
|
||||
if n == 1: return false
|
||||
if (n and 1) == 0: return n == 2
|
||||
if n mod 3 == 0: return n == 3
|
||||
var d = 5
|
||||
while d * d <= n:
|
||||
if n mod d == 0: return false
|
||||
inc d, 2
|
||||
if n mod d == 0: return false
|
||||
inc d, 4
|
||||
result = true
|
||||
|
||||
func motzkin(n: Positive): seq[int64] =
|
||||
result.setLen(n + 1)
|
||||
result[0] = 1
|
||||
result[1] = 1
|
||||
for i in 2..n:
|
||||
result[i] = (result[i-1] * (2 * i + 1) + result[i-2] * (3 * i - 3)) div (i + 2)
|
||||
|
||||
echo " n M[n] Prime?"
|
||||
echo "-----------------------------------"
|
||||
var m = motzkin(41)
|
||||
for i, val in m:
|
||||
echo &"{i:2} {insertSep($val):>23} {val.isPrime}"
|
||||
6
Task/Motzkin-numbers/PARI-GP/motzkin-numbers.parigp
Normal file
6
Task/Motzkin-numbers/PARI-GP/motzkin-numbers.parigp
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
M=vector(41)
|
||||
M[1]=1
|
||||
M[2]=2
|
||||
for(n=3, 41, M[n]=(M[n-1]*(2*n+1) + M[n-2]*(3*n-3))/(n+2))
|
||||
M=concat([1], M)
|
||||
for(n=1, 42, print(M[n]," ",isprime(M[n])))
|
||||
24
Task/Motzkin-numbers/Perl/motzkin-numbers.pl
Normal file
24
Task/Motzkin-numbers/Perl/motzkin-numbers.pl
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict; # https://rosettacode.org/wiki/Motzkin_numbers
|
||||
use warnings;
|
||||
use ntheory qw( is_prime );
|
||||
|
||||
sub motzkin
|
||||
{
|
||||
my $N = shift;
|
||||
my @m = ( 0, 1, 1 );
|
||||
for my $i ( 3 .. $N )
|
||||
{
|
||||
$m[$i] = ($m[$i - 1] * (2 * $i - 1) + $m[$i - 2] * (3 * $i - 6)) / ($i + 1);
|
||||
}
|
||||
return splice @m, 1;
|
||||
}
|
||||
|
||||
print " n M[n]\n";
|
||||
my $count = 0;
|
||||
for ( motzkin(42) )
|
||||
{
|
||||
printf "%3d%25s %s\n", $count++, s/\B(?=(\d\d\d)+$)/,/gr,
|
||||
is_prime($_) ? 'prime' : '';
|
||||
}
|
||||
26
Task/Motzkin-numbers/Phix/motzkin-numbers-1.phix
Normal file
26
Task/Motzkin-numbers/Phix/motzkin-numbers-1.phix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">include</span> <span style="color: #004080;">mpfr</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">motzkin</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_inits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- {1,1}</span>
|
||||
<span style="color: #004080;">mpz</span> <span style="color: #000000;">m2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">()</span> <span style="color: #000080;font-style:italic;">-- (scratch)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">mpz</span> <span style="color: #000000;">m1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">()</span> <span style="color: #000080;font-style:italic;">-- (a new mpz rqd for every m[i])</span>
|
||||
<span style="color: #7060A8;">mpz_mul_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (nb i is 1-based)</span>
|
||||
<span style="color: #7060A8;">mpz_mul_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">],</span><span style="color: #000000;">3</span><span style="color: #0000FF;">*</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- ""</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m2</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">mpz_fdiv_q_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)==</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (verify rmdr==0)</span>
|
||||
<span style="color: #000000;">m</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">m1</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">m</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</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;">" n M[n]\n"</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;">"---------------------------\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">motzkin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">42</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: #000000;">42</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">mi</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_get_str</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #000000;">comma_fill</span><span style="color: #0000FF;">:=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">pi</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">mpz_prime</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])?</span><span style="color: #008000;">"prime"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">""</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;">"%2d %23s %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">mi</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pi</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
19
Task/Motzkin-numbers/Phix/motzkin-numbers-2.phix
Normal file
19
Task/Motzkin-numbers/Phix/motzkin-numbers-2.phix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">motzkin</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</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;">3</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">m</span> <span style="color: #0000FF;">&=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]*(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]*(</span><span style="color: #000000;">3</span><span style="color: #0000FF;">*</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">6</span><span style="color: #0000FF;">))/(</span><span style="color: #000000;">i</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;">m</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</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;">" n M[n]\n"</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;">"---------------------------\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">lim</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">machine_bits</span><span style="color: #0000FF;">()=</span><span style="color: #000000;">32</span><span style="color: #0000FF;">?</span><span style="color: #000000;">38</span><span style="color: #0000FF;">:</span><span style="color: #000000;">42</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">motzkin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lim</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: #000000;">lim</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">pi</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">is_prime</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])?</span><span style="color: #008000;">"prime"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">""</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;">"%2d %,23d %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">pi</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
22
Task/Motzkin-numbers/Python/motzkin-numbers.py
Normal file
22
Task/Motzkin-numbers/Python/motzkin-numbers.py
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
""" rosettacode.org/wiki/Motzkin_numbers """
|
||||
|
||||
from sympy import isprime
|
||||
|
||||
|
||||
def motzkin(num_wanted):
|
||||
""" Return list of the first N Motzkin numbers """
|
||||
mot = [1] * (num_wanted + 1)
|
||||
for i in range(2, num_wanted + 1):
|
||||
mot[i] = (mot[i-1]*(2*i+1) + mot[i-2]*(3*i-3)) // (i + 2)
|
||||
return mot
|
||||
|
||||
|
||||
def print_motzkin_table(N=41):
|
||||
""" Print table of first N Motzkin numbers, and note if prime """
|
||||
print(
|
||||
" n M[n] Prime?\n-----------------------------------")
|
||||
for i, e in enumerate(motzkin(N)):
|
||||
print(f'{i : 3}{e : 24,}', isprime(e))
|
||||
|
||||
|
||||
print_motzkin_table()
|
||||
9
Task/Motzkin-numbers/Quackery/motzkin-numbers.quackery
Normal file
9
Task/Motzkin-numbers/Quackery/motzkin-numbers.quackery
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
' [ 1 1 ]
|
||||
41 times
|
||||
[ dup -2 split nip do
|
||||
i^ 2 + 2 * 1 - *
|
||||
swap i^ 2 + 3 * 6 - * +
|
||||
i^ 3 + / join ]
|
||||
behead drop
|
||||
witheach
|
||||
[ i^ echo sp dup echo isprime if [ say " prime" ] cr ]
|
||||
43
Task/Motzkin-numbers/REXX/motzkin-numbers.rexx
Normal file
43
Task/Motzkin-numbers/REXX/motzkin-numbers.rexx
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/*REXX program to display the first N Motzkin numbers, and if that number is prime. */
|
||||
numeric digits 92 /*max number of decimal digits for task*/
|
||||
parse arg n . /*obtain optional argument from the CL.*/
|
||||
if n=='' | n=="," then n= 42 /*Not specified? Then use the default.*/
|
||||
w= length(n) + 1; wm= digits()%4 /*define maximum widths for two columns*/
|
||||
say center('n', w ) center("Motzkin[n]", wm) center(' primality', 11)
|
||||
say center('' , w, "─") center('' , wm, "─") center('', 11, "─")
|
||||
@.= 1 /*define default vale for the @. array.*/
|
||||
do m=0 for n /*step through indices for Motzkin #'s.*/
|
||||
if m>1 then @.m= (@(m-1)*(m+m+1) + @(m-2)*(m*3-3))%(m+2) /*calculate a Motzkin #*/
|
||||
call show /*display a Motzkin number ──► terminal*/
|
||||
end /*m*/
|
||||
|
||||
say center('' , w, "─") center('' , wm, "─") center('', 11, "─")
|
||||
exit 0 /*stick a fork in it, we're all done. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
@: parse arg i; return @.i /*return function expression based on I*/
|
||||
commas: parse arg ?; do jc=length(?)-3 to 1 by -3; ?=insert(',', ?, jc); end; return ?
|
||||
prime: if isPrime(@.m) then return " prime"; return ''
|
||||
show: y= commas(@.m); say right(m, w) right(y, max(wm, length(y))) prime(); return
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
isPrime: procedure expose p?. p#. p_.; parse arg x /*persistent P·· REXX variables.*/
|
||||
if symbol('P?.#')\=='VAR' then /*1st time here? Then define primes. */
|
||||
do /*L is a list of some low primes < 100.*/
|
||||
L= 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
|
||||
p?.=0 /* [↓] define P_index, P, P squared.*/
|
||||
do i=1 for words(L); _= word(L,i); p?._= 1; p#.i= _; p_.i= _*_
|
||||
end /*i*/; p?.0= x2d(3632c8eb5af3b) /*bypass big ÷*/
|
||||
p?.n= _ + 4 /*define next prime after last prime. */
|
||||
p?.#= i - 1 /*define the number of primes found. */
|
||||
end /* p?. p#. p_ must be unique. */
|
||||
if x<p?.n then return p?.x /*special case, handle some low primes.*/
|
||||
if x==p?.0 then return 1 /*save a number of primality divisions.*/
|
||||
parse var x '' -1 _ /*obtain right─most decimal digit of X.*/
|
||||
if _==5 then return 0; if x//2 ==0 then return 0 /*X ÷ by 5? X ÷ by 2?*/
|
||||
if x//3==0 then return 0; if x//7 ==0 then return 0 /*" " " 3? " " " 7?*/
|
||||
/*weed numbers that're ≥ 11 multiples. */
|
||||
do j=5 to p?.# while p_.j<=x; if x//p#.j ==0 then return 0
|
||||
end /*j*/
|
||||
/*weed numbers that're>high multiple Ps*/
|
||||
do k=p?.n by 6 while k*k<=x; if x//k ==0 then return 0
|
||||
if x//(k+2)==0 then return 0
|
||||
end /*k*/; return 1 /*Passed all divisions? It's a prime.*/
|
||||
10
Task/Motzkin-numbers/Raku/motzkin-numbers-1.raku
Normal file
10
Task/Motzkin-numbers/Raku/motzkin-numbers-1.raku
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
use Lingua::EN::Numbers;
|
||||
|
||||
constant \C = 1, |[\×] (2, 6 … ∞) Z/ 2 .. *;
|
||||
|
||||
sub binomial { [×] ($^n … 0) Z/ 1 .. $^p }
|
||||
|
||||
my \𝐌 = 1, |(1..∞).map: -> \𝐧 { sum ^𝐧 .map( -> \𝐤 { C[𝐤] × binomial 𝐧, 2×𝐤 } ) };
|
||||
|
||||
say " 𝐧 𝐌[𝐧] Prime?";
|
||||
𝐌[^42].kv.map: { printf "%2d %24s %s\n", $^k, $^v.&comma, $v.is-prime };
|
||||
6
Task/Motzkin-numbers/Raku/motzkin-numbers-2.raku
Normal file
6
Task/Motzkin-numbers/Raku/motzkin-numbers-2.raku
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
use Lingua::EN::Numbers;
|
||||
|
||||
my \𝐌 = 1, 1, { state $i = 2; ++$i; ($^b × (2 × $i - 1) + $^a × (3 × $i - 6)) ÷ ($i + 1) } … *;
|
||||
|
||||
say " 𝐧 𝐌[𝐧] Prime?";
|
||||
𝐌[^42].kv.map: { printf "%2d %24s %s\n", $^k, $^v.&comma, $v.is-prime };
|
||||
16
Task/Motzkin-numbers/Ruby/motzkin-numbers.rb
Normal file
16
Task/Motzkin-numbers/Ruby/motzkin-numbers.rb
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
require "prime"
|
||||
|
||||
motzkin = Enumerator.new do |y|
|
||||
m = [1,1]
|
||||
m.each{|m| y << m }
|
||||
|
||||
2.step do |i|
|
||||
m << (m.last*(2*i+1) + m[-2]*(3*i-3)) / (i+2)
|
||||
m.unshift # an arr with last 2 elements is sufficient
|
||||
y << m.last
|
||||
end
|
||||
end
|
||||
|
||||
motzkin.take(42).each_with_index do |m, i|
|
||||
puts "#{'%2d' % i}: #{m}#{m.prime? ? ' prime' : ''}"
|
||||
end
|
||||
29
Task/Motzkin-numbers/Rust/motzkin-numbers.rust
Normal file
29
Task/Motzkin-numbers/Rust/motzkin-numbers.rust
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// [dependencies]
|
||||
// primal = "0.3"
|
||||
// num-format = "0.4"
|
||||
|
||||
fn motzkin(n: usize) -> Vec<usize> {
|
||||
let mut m = vec![0; n];
|
||||
m[0] = 1;
|
||||
m[1] = 1;
|
||||
for i in 2..n {
|
||||
m[i] = (m[i - 1] * (2 * i + 1) + m[i - 2] * (3 * i - 3)) / (i + 2);
|
||||
}
|
||||
m
|
||||
}
|
||||
|
||||
fn main() {
|
||||
use num_format::{Locale, ToFormattedString};
|
||||
let count = 42;
|
||||
let m = motzkin(count);
|
||||
println!(" n M(n) Prime?");
|
||||
println!("-----------------------------------");
|
||||
for i in 0..count {
|
||||
println!(
|
||||
"{:2} {:>23} {}",
|
||||
i,
|
||||
m[i].to_formatted_string(&Locale::en),
|
||||
primal::is_prime(m[i] as u64)
|
||||
);
|
||||
}
|
||||
}
|
||||
1
Task/Motzkin-numbers/Sidef/motzkin-numbers-1.sidef
Normal file
1
Task/Motzkin-numbers/Sidef/motzkin-numbers-1.sidef
Normal file
|
|
@ -0,0 +1 @@
|
|||
say 50.of { .motzkin }
|
||||
11
Task/Motzkin-numbers/Sidef/motzkin-numbers-2.sidef
Normal file
11
Task/Motzkin-numbers/Sidef/motzkin-numbers-2.sidef
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
func motzkin_triangle(num, callback) {
|
||||
var row = []
|
||||
{ |n|
|
||||
row = [0, 1, {|i| row[i+2] + row[i] + row[i+1] }.map(0 .. n-3)..., 0]
|
||||
callback(row.grep{ .> 0 })
|
||||
} << 2..(num+1)
|
||||
}
|
||||
|
||||
motzkin_triangle(10, {|row|
|
||||
row.map { "%4s" % _ }.join(' ').say
|
||||
})
|
||||
15
Task/Motzkin-numbers/Sidef/motzkin-numbers-3.sidef
Normal file
15
Task/Motzkin-numbers/Sidef/motzkin-numbers-3.sidef
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
func motzkin_numbers(N) {
|
||||
|
||||
var (a, b, n) = (0, 1, 1)
|
||||
|
||||
N.of {
|
||||
var M = b//n #/
|
||||
n += 1
|
||||
(a, b) = (b, (3*(n-1)*n*a + (2*n - 1)*n*b) // ((n+1)*(n-1))) #/
|
||||
M
|
||||
}
|
||||
}
|
||||
|
||||
motzkin_numbers(42).each_kv {|k,v|
|
||||
say "#{'%2d' % k}: #{v}#{v.is_prime ? ' prime' : ''}"
|
||||
}
|
||||
39
Task/Motzkin-numbers/Swift/motzkin-numbers.swift
Normal file
39
Task/Motzkin-numbers/Swift/motzkin-numbers.swift
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
import Foundation
|
||||
|
||||
extension BinaryInteger {
|
||||
@inlinable
|
||||
public var isPrime: Bool {
|
||||
if self == 0 || self == 1 {
|
||||
return false
|
||||
} else if self == 2 {
|
||||
return true
|
||||
}
|
||||
|
||||
let max = Self(ceil((Double(self).squareRoot())))
|
||||
|
||||
for i in stride(from: 2, through: max, by: 1) where self % i == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func motzkin(_ n: Int) -> [Int] {
|
||||
var m = Array(repeating: 0, count: n)
|
||||
|
||||
m[0] = 1
|
||||
m[1] = 1
|
||||
|
||||
for i in 2..<n {
|
||||
m[i] = (m[i - 1] * (2 * i + 1) + m[i - 2] * (3 * i - 3)) / (i + 2)
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
let m = motzkin(42)
|
||||
|
||||
for (i, n) in m.enumerated() {
|
||||
print("\(i): \(n) \(n.isPrime ? "prime" : "")")
|
||||
}
|
||||
19
Task/Motzkin-numbers/Wren/motzkin-numbers.wren
Normal file
19
Task/Motzkin-numbers/Wren/motzkin-numbers.wren
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import "/long" for ULong
|
||||
import "/fmt" for Fmt
|
||||
|
||||
var motzkin = Fn.new { |n|
|
||||
var m = List.filled(n+1, 0)
|
||||
m[0] = ULong.one
|
||||
m[1] = ULong.one
|
||||
for (i in 2..n) {
|
||||
m[i] = (m[i-1] * (2*i + 1) + m[i-2] * (3*i -3))/(i + 2)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
System.print(" n M[n] Prime?")
|
||||
System.print("-----------------------------------")
|
||||
var m = motzkin.call(41)
|
||||
for (i in 0..41) {
|
||||
Fmt.print("$2d $,23i $s", i, m[i], m[i].isPrime)
|
||||
}
|
||||
24
Task/Motzkin-numbers/Yabasic/motzkin-numbers.basic
Normal file
24
Task/Motzkin-numbers/Yabasic/motzkin-numbers.basic
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
dim M(41)
|
||||
M(0) = 1 : M(1) = 1
|
||||
print str$(M(0), "%19g")
|
||||
print str$(M(1), "%19g")
|
||||
for n = 2 to 41
|
||||
M(n) = M(n-1)
|
||||
for i = 0 to n-2
|
||||
M(n) = M(n) + M(i)*M(n-2-i)
|
||||
next i
|
||||
print str$(M(n), "%19.0f"),
|
||||
if isPrime(M(n)) then print "is a prime" else print : fi
|
||||
next n
|
||||
end
|
||||
|
||||
sub isPrime(v)
|
||||
if v < 2 then return False : fi
|
||||
if mod(v, 2) = 0 then return v = 2 : fi
|
||||
if mod(v, 3) = 0 then return v = 3 : fi
|
||||
d = 5
|
||||
while d * d <= v
|
||||
if mod(v, d) = 0 then return False else d = d + 2 : fi
|
||||
wend
|
||||
return True
|
||||
end sub
|
||||
Loading…
Add table
Add a link
Reference in a new issue