Il y a une belle expression polynomiale modulo 7 pour le troisième côté étant donné les deux côtés a et b .
3 ( un3b - a b3)modsept
ou factorisé
3 a b ( a2- b2)modsept
Le modulo 7 correspond à un reste dans {0,1,2,3,4,5,6}.
J'explique pourquoi cela fonctionne dans cette réponse de Math SE , bien que je pense qu'il y a probablement un argument plus clair qui me manque. Le seul autre polynôme à deux termes qui fonctionne est
( 3 a5b5- un3b )modsept
que j’ai trouvé à l’origine en transformant mon bit-bashing en opérations arithmétiques, puis a effectué une recherche brute-force sur des polynômes de cette forme afin de trouver la plus jolie.
N'hésitez pas à ajouter des ports de cela dans votre langue préférée; c'est un post CW.
J, 9 de Synthetica
7|3***+*-
Voir mon post
Dyalog APL, 9 de ngn (typo corrigée par Adám)
7|3×××+×-
Vol flagrant d'en haut J réponse.
TI-Basic, 14 de Timtech
7fPart((A³B-AB³)/21
Pyth, 16 par FryAmTheEggman
M%*3-*H^G3*^H3G7
Définit une fonction g
de deux valeurs.
Golfscript, 18 de Peter Taylor (ancien polynôme)
~1$*.5?3*@.*@*- 7%
CJam, 18 ans de Martin Büttner (importé de Peter's GolfScript) (ancien polynôme)
l~1$*_5#3*@_*@*m7%
Mathematica, 20 ans par Martin Büttner
Mod[+##(#-#2)3##,7]&
Oui, c'est un plus unaire, et non, il n'y a pas de moyen plus court qui n'utilise pas de plus unaire.
dc, 21 par Toby Speight
sb7+d3^lb*rlb3^*-3*7%
Je dois ajouter 7 à a
pour que la différence soit toujours positive (dc a un %
opérateur signé ).
Julia, 24 23 de Martin Büttner
f(a,b)=3a*b*(a^2-b^2)%7
CoffeeScript, 28 26 de rink.attendant.6
x=(a,b)->3*a*b*(a*a-b*b)%7
JavaScript (ES6), 28 26 de rink.attendant.6
x=(a,b)=>3*a*b*(a*a-b*b)%7
Essentiellement identique à CoffeeScript.
Python 28, par xnor
lambda a,b:3*a*b*(a*a-b*b)%7
Bash, 31 ans
Rien de spécial:
echo $[3*($1**3*$2-$1*$2**3)%7]
Ou bien:
echo $[3*$1*$2*($1*$1-$2*$2)%7]
Une autre approche (plus longue mais peut-être intéressante) .
Nim, 36 de Sillesta
proc(x,y:int):int=3*x*y*(x*x-y*y)%%7
Java 7, 46 44 de rink.attendant.6
int f(int a,int b){return(a*a-b*b)*a*b*3%7;}
Java 8, 25 23 de Kevin Cruijssen
a->b->(a*a-b*b)*a*b*3%7
PHP, 49 47 par rink.attendant.6
function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}
Lot, 52 non-traité
set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%
CMD ne supporte pas le vrai module en natif (donc ne peut pas gérer les nombres négatifs) - par conséquent %%7+7)%%7
.
LESS (en tant que mixin paramétrique ), 62 60 par rink.attendant.6
.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}
Voir mon post ci-dessous .
05AB1E, 10 8 de Emigna (-2 octets de Kevin Cruijssen)
nÆs`3P7%
Essayez-le en ligne.
Haskell, 31 27 25 par nom d'affichage générique
a#b=3*a*b*(a*a-b*b)`mod`7
Essayez-le en ligne!
Excel, 27 par de Wernisch
=MOD(3*(A1^3*B1-A1*B1^3),7)
Excel VBA, 25 par Taylor Scott
?3*[A1^3*B1-A1*B1^3]Mod 7
Forth (gforth) 41 par reffu
: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;
Essayez-le en ligne!
C #, 23 de Kevin Cruijssen
a=>b=>(a*a-b*b)*a*b*3%7