2つの側面aとbが与えられた場合、3番目の側面に対して7を法とする素敵な多項式表現があります。
3(a3b−ab3)mod7
または因数分解
3ab(a2−b2)mod7
モジュロ7は、{0,1,2,3,4,5,6}の剰余にマッピングされます。
このMath SEの答えでなぜそれが機能するのかを説明しますが、私はおそらく私が見逃しているよりクリーンな議論があると思います。動作する唯一の他の2項多項式は
(3a5b5−a3b)mod7
私はもともと、ビットバッシングを算術演算に変換し、この形式の多項式でブルートフォース検索を実行して、より良いものを見つけました。
このポートをお気に入りの言語に自由に追加してください。これはCW投稿です。
J、9 by Synthetica
7|3***+*-
私の投稿を見る
Dyalog APL、9 by ngn(タイプミスはAdámにより修正)
7|3×××+×-
上記のJ回答から露骨に盗まれました。
TI-Basic、Timtechによる14
7fPart((A³B-AB³)/21
Pyth、16 by FryAmTheEggman
M%*3-*H^G3*^H3G7
g
2つの値の関数を定義します。
Golfscript、18 by Peter Taylor(旧多項式)
~1$*.5?3*@.*@*- 7%
CJam、18 by MartinBüttner(ピーターのGolfScriptから移植)(古い多項式)
l~1$*_5#3*@_*@*m7%
Mathematica、20 by MartinBüttner
Mod[+##(#-#2)3##,7]&
はい、それは単項プラスであり、いいえ、単項プラスを使用しない短い方法はありません。
dc、21 by Toby Speight
sb7+d3^lb*rlb3^*-3*7%
7を追加しa
て、差が常に正であることを確認する必要があります(dcには符号付き%
演算子があります)。
ジュリア、MartinBüttnerによる24 23
f(a,b)=3a*b*(a^2-b^2)%7
CoffeeScript、28 26 by rink.attendant.6
x=(a,b)->3*a*b*(a*a-b*b)%7
JavaScript(ES6)、rink.attendant.6による28 26
x=(a,b)=>3*a*b*(a*a-b*b)%7
基本的にCoffeeScriptと同じです。
Python 28、xnor
lambda a,b:3*a*b*(a*a-b*b)%7
バッシュ、31
特にない:
echo $[3*($1**3*$2-$1*$2**3)%7]
または、代わりに:
echo $[3*$1*$2*($1*$1-$2*$2)%7]
別の(より長いが、おそらく興味深い)アプローチ。
ニム、36によってSillesta
proc(x,y:int):int=3*x*y*(x*x-y*y)%%7
Javaの7、46 rink.attendant.6によって44
int f(int a,int b){return(a*a-b*b)*a*b*3%7;}
Javaの8、25ケビンCruijssenで23
a->b->(a*a-b*b)*a*b*3%7
PHP、49 47 by rink.attendant.6
function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}
バッチ、52 unclemeat
set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%
CMDは本来、真のモジュラスをサポートしていません(したがって、負の数を処理できません)-したがって%%7+7)%%7
。
LESS(パラメトリックミックスインとして)、rink.attendant.6による62 60
.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}
以下の私の投稿を参照してください。
05AB1E、Emignaによる10 8(Kevin Cruijssenによる2バイト)
nÆs`3P7%
オンラインでお試しください。
Haskell、汎用表示名別31 27 25
a#b=3*a*b*(a*a-b*b)`mod`7
オンラインでお試しください!
Excel、27 byヴェルニッシュ
=MOD(3*(A1^3*B1-A1*B1^3),7)
Excel VBA、25 by Taylor Scott
?3*[A1^3*B1-A1*B1^3]Mod 7
Forth(gforth)41 by reffu
: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;
オンラインでお試しください!
C#、Kevin Cruijssen著23
a=>b=>(a*a-b*b)*a*b*3%7