Три натуральных числа A, B, C являются ABC-тройными, если они взаимно просты, с A <B и удовлетворяющими соотношению: A + B = C
Примеры :
1, 8, 9
является ABC-тройкой, поскольку они взаимно просты, 1 <8 и 1 + 8 = 96, 8, 14
не потому что они не взаимно просты7, 5, 12
не потому что 7> 5
Вы можете увидеть эту презентацию Frits Beukers 2005 для более подробной информации о ABC-тройках.
Ввод, вывод
Три целых числа, десятичное написано. Могут быть разделены значения или список. Вывод должен был быть истинным / ложным значением, являются ли три целых числа ABC-тройкой.
Примечание. Важно соблюдать порядок целых чисел в списке, например: 1, 8, 9
он не считается тем же списком, что 9, 1, 8
и любая другая комбинация. Таким образом, первый ABC-тройной, а второй нет.
Таким образом, A является первым элементом списка, B - вторым, а C - третьим.
Контрольные примеры
Каждый из следующих списков должен выводить истинное значение
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Каждый из следующих списков должен выводить значение Falsey
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
[A,B,C]
, или нам также разрешено принимать входные данные в порядке[C,B,A]
или[C,A,B]
?Ответы:
Желе ,
109 байтПопробуйте онлайн!
Как это устроено
источник
Haskell ,
48 3829 байт-10 байт из - за TFeld «S
gcd
трюк!-7 байт благодаря HPWiz за улучшение теста на совместность и определение лишнего пространства!
-2 байта спасибо Ними за предложение инфикс-оператора!
Попробуйте онлайн!
объяснение
Первые два условияgcd(a,b)=gcd(a,c)=gcd(b,c) :
a < b
иa + b == c
довольно очевидны, третий использует, чтоЗаписьgcd(a,c)=U⋅a+V⋅c с использованием тождества Безу и подстановки c=a+b дает:
Так как НОД это минимальное положительное решение этой идентичности следует , что НОД ( , б ) = НОД ( , гр ) . Другой случай симметричен.gcd gcd(a,b)=gcd(a,c)
источник
gcd a b==1
. Так какgcd a b
делитa+b=c
. то естьgcd(gcd a b)c=gcd a b
Perl 6 ,
3332 байта-1 байт благодаря nwellnhof
Попробуйте онлайн!
Блок анонимного кода, который принимает список из трех чисел и возвращает True или False.
объяснение
источник
Excel, 33 байта
источник
Баш, 61 байт
Попробуйте онлайн!
Ввод в качестве аргументов командной строки, вывод в коде выхода (также производит вывод на stdout как побочный эффект, но это можно игнорировать).
Вторая часть (начиная с
&&((
) довольно стандартная, но интересным является простой тест:источник
&&
может быть изменен&
из-за старшинстваJava 10,
6564 байта-1 байт спасибо @Shaggy .
Попробуйте онлайн.
Объяснение:
источник
a==1
->a<2
чтобы сохранить байт.05AB1E ,
121110 байтСохранено 1 байт благодаря Кевину Круйссену
Попробуйте онлайн! или как тестовый набор
объяснение
источник
RÆ_*`\‹*¿Θ
Test Suite .Python 2 ,
6967636255 байтПопробуйте онлайн!
Python 3 ,
5851 байтПопробуйте онлайн!
-7 байт, спасибо H.PWiz
источник
gcd
вgcd
трик в силе? Что делать, еслиa
не взаимно сc
?gcd(a,b)
, так какgcd(a,b)
делитa+b
Japt ,
16141311 байтПопытайся
источник
>
следует©
.JavaScript (ES6),
54 43 4240 байтСпасибо @Shaggy за указание на то, что нам не нужно вычислятьжк ( а , в ) , Сохранено 11 байт, переписав код соответствующим образом.
Вводит как 3 отдельных целых числа. Возвращаетт т у й для ABC-тройной или любой 0 или ел ы е в противном случае.
Попробуйте онлайн!
источник
gcd(c,a)
.Wolfram Language
24 30 2826 байтовС 2 байтами выбритой дверной ручкой. Еще 2 байта были сбиты @jaeyong
источник
CoprimeQ@##
чтобы сохранить 2 байта.GCD@##==1
would save 2 bytesC # (интерактивный компилятор Visual C #) , 90 байт
Работает на номера до 1e8, занимает около 35 секунд на моей машине. Вместо того, чтобы вычислять gcd, как другие, функция просто создает огромный массив и фильтрует индексы, не являющиеся делителями a или b, и проверяет, сколько осталось элементов. Затем он проверяет, равен ли элемент один плюс элемент два элементу три. Наконец, он проверяет, меньше ли первый элемент, чем второй.
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 59 байт
Попробуйте онлайн!
источник
ECMAScript Regex, 34 байта
Ввод одинарный, в домене
^x*,x*,x*$
(повторяетсяx
с разделителями,
).^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$
Попробуйте онлайн! (.NET regex engine)
Попробуйте онлайн! (Движок регулярных выражений SpiderMonkey)
Вопрос говорит: «Три целых числа, десятичное число написано», так что это может не соответствовать (так как оно принимает входные данные в унарном виде), но это делает такое элегантное чистое регулярное выражение, что я надеюсь, что оно, по крайней мере, будет оценено.
Тем не менее, обратите внимание, что если формулировка должна быть интерпретирована буквально, то лямбда-выражения и представления функций, которые принимают целочисленные аргументы, также должны быть дисквалифицированы, так как для строгого соблюдения спецификации вопроса они должны будут принимать входные данные в форме строки.
источник
J , 27 байт
Попробуйте онлайн!
Вдохновлено решением Perl Джо Кинга
источник
C # (.NET Core) , 68 байт
Без линка
Попробуйте онлайн!
источник
Stax , 12 байт
Запустите и отладьте его
источник
Чисто , 43 байта
Попробуйте онлайн!
Похоже на все остальное, потому что прямой тест такой же.
источник
Pari / GP , 30 байт
Сохранено 2 байта благодаря @Shaggy .
Попробуйте онлайн!
источник
Befunge-98 (FBBI) , 83 байта
Попробуйте онлайн!
Ввод, представляющий собой тройку целых чисел
[A,B,C]
, подается в Befunge как целые числа, разделенные пробеломC B A
.источник
Mathematica 35 байтов
если порядок важен:
или...
источник
Сетчатка 0.8.2 ,
4241 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Редактировать: 1 байт сохранен благодаря @Deadcode. Объяснение:
Преобразовать в одинарный.
Убедитесь, что А и В не имеют общего множителя.
Проверьте, что A <B и A + B = C.
источник
^(1+),(1+\1),\1\2$
на^(1+)(,1+\1)\2\1$
.A
операции Retina на самом деле не спасает меня ни одного байта.Common Lisp, 51 байт
Попробуйте онлайн!
источник