#!/usr/bin/perl runtests(); print "ckenigma is " . ckpow(ckadd(ckpow(2,100),ckpow(3,200)),300) . "\n"; sub runtests { print "#ck1 = ck2\n"; for $x (1..10) { print "$x = " .ck1($x) . "=" . ck2($x) . "\n"; } print "#ckpow\n"; for $n (1..10) { $x = 2 ** $n; print "2**$n = $x = " .ck1($x) . "=" . ckpow(2, $n) . "\n"; } print "#ckmul\n"; for $a (1..5) { for $b (1..5) { $x = $a * $b; print "$a*$b = $x = " .ck1($x) . "=" . ckmul($a, $b) . "\n"; } } print "#ckadd\n"; for $a (1..5) { for $b (1..5) { $x = $a + $b; print "$a*$b = $x = " .ck1($x) . "=" . ckadd($a, $b) . "\n"; } } print "#formpow\n"; for $a (1..3) { for $b (1..3) { for $n (1..3) { $x = ($a ** $n + $b ** ($n*2)) ** $n; print "($a ** $n + $b ** ($n*2)) ** $n = $x = " . ck1($x) . "=" . ckpow(ckadd(ckpow($a, $n),ckpow($b, 2*$n)),$n) . "\n"; } } } } sub ck1 { my ($v) = @_; my $c = 0; for (split(//,$v)) { $c += $_; } return ck1($c) if (length($c) > 1); return $c; } sub ck2 { my ($v) = @_; $c = $v - (int($v / 9)*9); $c = 9 if $c == 0; return $c; } sub ckform { my ($n) = @_; return $c; } sub ckadd { my ($a, $b) = @_; return ck2(ck2($a) + ck2($b)); } sub ckpow { my ($b, $n) = @_; my $c = 1; for ($i = 0; $i < $n; ++$i) { $c = ck2($b * ck2($c)); } return $c; } sub ckmul { my ($a, $b) = @_; return ck2($a * ck2($b)); }