Існує приємний поліноміальний вираз 7 для третьої сторони з двома сторонами a і b .
3 ( а3б - а б3)мод7
або фактор
3 а б ( а2- б2)мод7
Модуль 7 відображає залишок у {0,1,2,3,4,5,6}.
Я пояснюю, чому це працює у цій відповіді Math SE , хоча я думаю, що я, мабуть, є більш чистим аргументом, який я пропускаю. Єдиний інший двочленний поліном, який працює, - це
( 3 а5б5- а3б )мод7
яку я спочатку виявив, перетворивши своє розбиття на біт в арифметичні операції, потім здійснив грубу силу пошуку поліномів цієї форми, щоб знайти приємніший.
Будь ласка, не соромтесь додавати порти цього на улюблену мову; це посада CW.
J, 9 - Synthetica
7|3***+*-
Дивіться мій пост
Dyalog APL, 9 на ngn (друкарська помилка, зафіксована Adám)
7|3×××+×-
Відверто вкрадена зверху J відповідь.
TI-Basic, 14 від Timtech
7fPart((A³B-AB³)/21
Pyth, 16 від FryAmTheEggman
M%*3-*H^G3*^H3G7
Визначає функцію g
з двох значень.
Гольфскрипт, 18 Пітер Тейлор (старий поліном)
~1$*.5?3*@.*@*- 7%
CJam, 18 - Мартін Бюттнер (портував із Golf's PeterScript) (старий поліном)
l~1$*_5#3*@_*@*m7%
Математика, 20 Мартін Бюттнер
Mod[+##(#-#2)3##,7]&
Так, це одинарний плюс, і ні, немає більш короткого способу, який не використовує одинарний плюс.
DC, 21 від Toby Speight
sb7+d3^lb*rlb3^*-3*7%
Я повинен додати 7, щоб a
переконатися, що різниця завжди позитивна (DC має підписаний %
оператор).
Джулія, 24 23 Мартін Бюттнер
f(a,b)=3a*b*(a^2-b^2)%7
CoffeeScript, 28 26 від rink.attendant.6
x=(a,b)->3*a*b*(a*a-b*b)%7
JavaScript (ES6), 28 26 від rink.attendant.6
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 - Сіллеста
proc(x,y:int):int=3*x*y*(x*x-y*y)%%7
Java 7, 46 44 від rink.attendant.6
int f(int a,int b){return(a*a-b*b)*a*b*3%7;}
Ява 8, 25 23 Кевін Круїссен
a->b->(a*a-b*b)*a*b*3%7
PHP, 49 47 від rink.attendant.6
function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}
Пачка, 52 нечистого м’яса
set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%
CMD не підтримує істинний модуль спочатку (тому не може обробляти негативні числа) - отже %%7+7)%%7
.
МЕНШЕ (як параметричний міксин ), 62 60 від rink.attendant.6
.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}
Дивіться мою публікацію нижче .
05AB1E, 10 8 - Емінья (-2 байти Кевін Круїссен)
nÆs`3P7%
Спробуйте в Інтернеті.
Haskell, 31 27 25 за загальним екраном
a#b=3*a*b*(a*a-b*b)`mod`7
Спробуйте в Інтернеті!
Excel, 27 - Верніш
=MOD(3*(A1^3*B1-A1*B1^3),7)
Excel VBA, 25 Тейлор Скотт
?3*[A1^3*B1-A1*B1^3]Mod 7
Четвертий (gforth) 41 від reffu
: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;
Спробуйте в Інтернеті!
C #, 23 Кевін Круїссен
a=>b=>(a*a-b*b)*a*b*3%7