2013 a la factorisation principale 3*11*61
. 2014 a la factorisation principale 2*19*53
. Une propriété intéressante au sujet de ces factorisation est qu'il existe des nombres premiers distincts dans les décompositions de 2013 et 2014 cette somme au même numéro: 11+61=19+53=72
.
Écrivez un programme ou une fonction qui prend en entrée deux entiers positifs supérieurs à 1 et renvoie une valeur vraie s'il existe une somme de facteurs premiers sélectionnés d'un nombre qui est égale à une somme de facteurs premiers sélectionnés dans le deuxième nombre, et un valeur falsey autrement.
Clarifications
- Plus de deux facteurs premiers peuvent être utilisés. Il n'est pas nécessaire d'utiliser tous les facteurs premiers du nombre dans la somme. Il n'est pas nécessaire que le nombre de nombres premiers utilisés à partir des deux nombres soit égal.
- Même si un nombre premier est élevé à une puissance supérieure à 1 dans la factorisation d'un nombre, il ne peut être utilisé qu'une seule fois dans la somme des nombres premiers pour le nombre.
- 1 n'est pas premier.
- Les deux nombres entrés seront inférieurs à
2^32-1
.
Cas de test
5,6
5=5
6=2*3
5=2+3
==>True
2013,2014
2013=3*11*61
2014=2*19*53
11+61=19+53
==>True
8,15
8=2^3
15=3*5
No possible sum
==>False
21,25
21=3*7
25=5^2
No possible sum (can't do 3+7=5+5 because of exponent)
==>False
C'est le golf de code. Des règles standard s'appliquent. Le code le plus court en octets gagne.
true
, car ils partagent le facteur7
?Réponses:
Julia,
9593 octetsLa fonction principale est
f
et elle appelle une fonction d'aideg
.Non golfé:
Enregistré 2 octets grâce à Dark Alephalpha
la source
map(p->map
c'est plus court que(m=map)(p->m
.Pyth, 11 octets
Saisie dans le formulaire
30,7
.la source
Pyth -
171211 octetsMerci à @FryAmTheEggman pour avoir corrigé ma réponse et enregistré un octet.
Suite de tests .
la source
ty
œuvres et sauve un bye?Haskell,
115106 octetsExemple d'utilisation:
2013 # 2014
->True
.p
fait une liste de tous les facteurs premiers de son argument, supprime les doublons, fait une liste de toutes les sous-séquences, supprime le premier (qui est toujours la liste vide) et résume finalement les sous-séquences.#
vérifie s'ilp a
n'est pas égal à la différencep a \\ p b
. S'ils ne sont pas égaux, ils ont au moins un élément commun.la source
Japt, 25 octets
Sorties
true
oufalse
. Essayez-le en ligne!Non golfé et explication
Pour un octet supplémentaire, vous pouvez fractionner le code factoriser-unique-combiner-somme entre les deux entrées, avec l'avantage supplémentaire d'avoir une complexité temporelle de
O(O(25-byte version)^2)
:la source
CJam, 23 octets
Testez-le ici.
La valeur véridique sera toutes les sommes communes concaténées, la valeur fausse est la chaîne vide.
Explication
la source
Brachylog ,
109 octetsEssayez-le en ligne!
Le prédicat réussit à retourner
[the sum, the sum]
s'il existe et échoue si la somme n'existe pas.-1 octet grâce à Fatalize (le créateur de Brachylog) me rappelant que le méta-prédicat de vérification existe.
la source
ᵛ - verify
au lieu deˢ=
pour enregistrer un octet.MATL , 23 octets
Utilise la version actuelle, 2.0.2 , antérieure à ce défi.
Les chiffres sont fournis sous forme de deux entrées distinctes. La sortie est
0
ou1
.Exemple
Explication
la source
Mathematica, 58 octets
Explication:
Il s'agit d'une fonction anonyme.
Tout d'abord,
IntersectingQ
vérifie si deux listes se croisent. Mais les entrées sont des nombres au lieu de listes, donc cela reste non évalué. Par exemple, si les entrées sont2013
et2014
, puisIntersectingQ@##&
retourneIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
est une autre fonction anonyme qui prend un entier, obtient une liste de ses facteurs premiers sans répétitions, prend l'ensemble de puissance, supprime l'ensemble vide, puis prend la somme de chaque ensemble.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
Retourne donc{3, 11, 61, 14, 64, 72, 75}
.Mappez
Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
ensuite l'expressionIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
etTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2014]]
sont des listes, afin que nous puissions obtenir le résultat de la collecte cette fois.la source
IntersectingQ
premier est incroyable! :)PARI / GP , 98 octets
Factor, grab prime (
[,1]
), boucle sur des sous-ensembles non vides, sum et uniq, puis coupez le résultat de ceci pour les deux nombres. La valeur retournée est le nombre d'intersections, ce qui est vrai à moins qu'elles ne soient égales à 0.la source
APL (Dyalog Extended) ,
2317 octets SBCS-5 grâce à ngn
Fonction infixe tacite anonyme.
Essayez-le en ligne!
⍥{
…}
Appliquez la fonction anonyme suivante aux deux arguments:⍭
facteurs premiers⍤
puis∪
les uniques de ceux0+⍀.,
tableau d'addition réduction de zéro concaténée à chaque facteur∊
ϵ nlist (aplatir)∩
le carrefour⍤
puis≢
le décompte de ceux1<
y en a-t-il plus d'un? (un parce que la somme d'aucun facteur)la source
p+.×⊤1↓⍳2*≢p←
->1↓∊(⊢,+)/0,⍨
1↓∊∘.+/0,¨
1↓∊0∘.+.,
un produit inouter - combien de fois voyez-vous cela :)⍥
bien, cela devrait aussi fonctionner:1<∘≢∩⍥{∊0∘.+.,∪⍭⍵}
05AB1E ,
108 octets-2 octets grâce à @Emigna .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
f€æO`å¦à
devrait fonctionner pour 8.Japt, 12 octets
Exécutez-le en ligne
la source
Python 3 , 206 octets
Il s'agit d'une fonction lambda (m), qui prend 2 nombres et renvoie un ensemble contenant toutes les sommes des facteurs premiers qu'ils ont en commun. En Python, il s'agit d'une valeur véridique lorsqu'elle n'est pas vide et d'une valeur de falsey lorsqu'elle est vide.
Edit: Il s'avère que ma réponse d'origine n'a pas fonctionné pour les entrées principales, comme l'a souligné @JoKing. Cela a été corrigé (avec quelques autres bugs) au coût tragique de 40 octets.
Explication rapide à l'aide de commentaires:
Essayez-le en ligne!
la source
5,6
, car il ne gère pas les entrées principalesAPL (NARS), 50 caractères, 100 octets
ici π trouverait le tableau des facteurs sur son argument;
serait la fonction qui trouve tous les sous-ensembles ... je dois dire qu'il semble que {⍵operator itsArguments} ¨ (pour chaque gauche) et ¨ (pour chaque droite) peut imiter une boucle avec un nombre fixe de cycles et ¨¨ est ok dans pour voir des sous-ensembles d'un ensemble ... cette façon de voir semble réduire les symboles dans les boucles de description ...; tester
Une petite analyse:
la source
Japt
-¡
, 14 octetsEnregistré 3 octets grâce à @Shaggy
Essayez-le
la source
ÎfUÌ l
ou, encore plus courte,rf l
.rø
serait le moyen le plus court de le faire, mais Oliver vous a battu.Gelée ,
189 octetsEssayez-le en ligne!
Merci à @Jonathan Allan pour -9 et l'aide incroyable :).
Prend l'entrée comme un tableau de deux éléments. Explication du code:
¹
la source
,
. LeẒƇ
est redondant, il n'y a pas de facteurs premiers non premiers. AlorsÆFḢ€
est justeÆf
, sauf que celui - ci nous donne les répétitions que nous pourrions réellement besoin, par exemple26=2*13
et125=5*5*5
tout2+13=5+5+5
. Cependant, même avec cela, ceẆ
n'est pas assez bon, par exemple au lieu d'26
utiliser,182=2*7*13
ce qui devrait également trouver cela2+13=5+5+5
mais ne le fait pas - au lieu de cela, nous voulons le power-set (ŒP
) sans l'élément principal, vide, (que nous pouvons utiliserḊ
).S€
ici peut être remplacé par§
. - Vous pouvez probablement enregistrer des octets avec$
etƊ
-.)
et avec mes correctifs pour le faire fonctionner correctement (plus le remplacerœ&
parf
) le code est de 9 octets:ÆfŒPḊ§)f/
essayez-leGaia ,
1611 octetsEssayez-le en ligne!
La fonction supérieure (première ligne) calcule les sommes de l'ensemble des facteurs premiers et la deuxième fonction trouve si l'un des éléments de l'intersection est différent de zéro.
la source