Trois entiers positifs A, B, C sont triples ABC s'ils sont premiers, avec A <B et satisfaisant la relation: A + B = C
Exemples :
1, 8, 9
est un ABC-triple car ils sont premiers, 1 <8 et 1 + 8 = 96, 8, 14
n'est pas parce qu'ils ne sont pas coprime7, 5, 12
n'est pas parce que 7> 5
Vous pouvez voir cette présentation de Frits Beukers 2005 pour plus de détails sur les triplets ABC.
Entrée sortie
Trois entiers, décimaux écrits. Peut être des valeurs séparées ou une liste. La sortie devait être une valeur véridique / fausse, que les trois entiers soient un triple ABC.
Remarque: Il est important de respecter l'ordre des entiers dans la liste, par exemple: 1, 8, 9
n'est pas considéré comme la même liste 9, 1, 8
ou toute autre combinaison. Le premier est donc un triple ABC et le second ne l'est pas.
Ainsi, A est le premier élément de la liste, B le deuxième et C le troisième.
Cas de test
Chacune des listes suivantes doit produire une valeur véridique
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Chacune des listes suivantes doit afficher une valeur de falsey
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
[A,B,C]
, ou sommes-nous également autorisés à prendre l'entrée dans l'ordre[C,B,A]
ou[C,A,B]
?Réponses:
Gelée ,
109 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Haskell ,
48 3829 octets-10 octets en raison de TFeld de »
gcd
truc!-7 octets grâce à HPWiz pour avoir amélioré le test de co-primalité et repéré un espace superflu!
-2 octets grâce à nimi avoir proposé un infix-opérateur!
Essayez-le en ligne!
Explication
Les deux premières conditionsgcd(a,b)=gcd(a,c)=gcd(b,c) :
a < b
eta + b == c
sont assez évidentes, le troisième utilisations quiÉcriregcd(a,c)=U⋅a+V⋅c utilisant l'identité de Bézout et en substituant c=a+b donne:
Puisque legcd est la solution positive minimale à cette identité, il s'ensuit que gcd(a,b)=gcd(a,c) . L'autre cas est symétrique.
la source
gcd a b==1
. Depuisgcd a b
divisea+b=c
. soitgcd(gcd a b)c=gcd a b
Perl 6 ,
3332 octets-1 octet grâce à nwellnhof
Essayez-le en ligne!
Bloc de code anonyme qui prend une liste de trois nombres et renvoie Vrai ou Faux.
Explication
la source
Excel, 33 octets
la source
bash, 61 octets
Essayez-le en ligne!
Entrée comme arguments de ligne de commande, sortie dans le code de sortie (produit également une sortie sur stdout comme effet secondaire, mais cela peut être ignoré).
The second part (starting from
&&((
) is pretty standard, but the interesting bit is the coprime test:la source
&&
can be changed to&
because of precedenceJava 10,
6564 bytes-1 byte thank to @Shaggy.
Try it online.
Explanation:
la source
a==1
->a<2
to save a byte.05AB1E,
121110 bytesSaved 1 byte thanks to Kevin Cruijssen
Try it online! or as a Test Suite
Explanation
la source
RÆ_*`\‹*¿Θ
Test Suite.Python 2,
6967636255 bytesTry it online!
Python 3,
5851 bytesTry it online!
-7 bytes, thanks to H.PWiz
la source
gcd
ingcd
trick valid? What ifa
is not coprime withc
?gcd(a,b)
, sincegcd(a,b)
dividesa+b
Japt,
16141311 bytesTry it
la source
>
follows©
.JavaScript (ES6),
54 43 4240 bytesThanks to @Shaggy for pointing out that we don't need to computegcd(a,c) . Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returnstrue for an ABC-triple, or either 0 or false otherwise.
Try it online!
la source
gcd(c,a)
.Wolfram Language
24 30 2826 bytesWith 2 bytes shaved by Doorknob. A further 2 bytes shaved off by @jaeyong sung
la source
CoprimeQ@##
to save 2 bytes.GCD@##==1
would save 2 bytesC# (Visual C# Interactive Compiler), 90 bytes
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
la source
C# (Visual C# Interactive Compiler), 59 bytes
Try it online!
la source
ECMAScript Regex, 34 bytes
Input is in unary, in the domain
^x*,x*,x*$
(repeatedx
s delimited by,
).^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
la source
J, 27 bytes
Try it online!
Inspired by Jo King's Perl solution
la source
C# (.NET Core), 68 bytes
Without Linq.
Try it online!
la source
Stax, 12 bytes
Run and debug it
la source
Clean, 43 bytes
Try it online!
Similar to basically everything else because the direct test is the same.
la source
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
Try it online!
la source
Befunge-98 (FBBI), 83 bytes
Try it online!
The input which is a triple of integers
[A,B,C]
is feeded into Befunge as space-separated integersC B A
.la source
Mathematica 35 bytes
if order is important:
or...
la source
Retina 0.8.2,
4241 bytesTry it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
Convert to unary.
Check that A and B have no common factor.
Check that A < B and A + B = C.
la source
^(1+),(1+\1),\1\2$
to^(1+)(,1+\1)\2\1$
.A
operation doesn't actually save me any bytes.Common Lisp, 51 bytes
Try it online!
la source