Un diviseur propre est un diviseur d'un nombre n , qui n'est pas n lui-même. Par exemple, les diviseurs appropriés de 12 sont 1, 2, 3, 4 et 6.
Vous recevrez un entier x , x ≥ 2, x ≤ 1000 . Votre tâche consiste à additionner tous les diviseurs propres les plus élevés des nombres entiers de 2 à x (inclus) (OEIS A280050 ).
Exemple (avec x = 6
):
Trouver tous les entiers entre 2 et 6 (inclus): 2,3,4,5,6.
Obtenez les diviseurs appropriés de chacun d'eux, et choisissez les plus élevés de chaque nombre:
- 2 -> 1
- 3 -> 1
- 4 -> 1, 2
- 5 -> 1
- 6 -> 1, 2, 3 .
Additionner les plus diviseurs:
1 + 1 + 2 + 1 + 3 = 8
.Le résultat final est 8.
Cas de test
Entrée | Production ------- + --------- | 2 | 1 4 | 4 6 | 8 8 | 13 15 | 41 37 | 229 100 | 1690 1000 | 165279
Règles
Les échappatoires par défaut s'appliquent.
Vous pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode standard .
C'est le code-golf , la soumission valide la plus courte dans chaque langue gagne! S'amuser!
Réponses:
Oasis , 4 octets
Code:
Essayez-le en ligne!
Explication:
Version étendue:
la source
Husk , 7 octets
Essayez-le en ligne!
Explication
Husk n'a pas encore intégré de calcul direct des diviseurs, donc j'utilise plutôt la factorisation principale. Le plus grand diviseur propre d'un nombre est le produit de ses facteurs premiers, à l'exception du plus petit. Je mappe cette fonction sur une plage de 2 à l'entrée et je résume les résultats.
la source
Python 2 , 50 octets
C'est lent et ne peut même pas faire face à l'entrée 15 sur TIO.
Essayez-le en ligne!
Cependant, la mémorisation ( merci @ musicman523 ) peut être utilisée pour vérifier tous les cas de test.
Essayez-le en ligne!
Version alternative, 52 octets
Au prix de 2 octets, nous pouvons choisir de calculer
f(n,k+1)
oun/k+f(n-1)
.Avec quelques astuces, cela fonctionne pour tous les cas de test, même sur TIO.
Essayez-le en ligne!
la source
f
c'est une fonction pure , vous pouvez la mémoriser pour exécuter les plus gros boîtiers sur TIOGelée , 6 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Brachylog , 10 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 40 octets
Un nombre est égal au produit de son diviseur propre le plus élevé et de son plus petit facteur premier.
la source
n>352
(au moins dans cet extrait, je ne sais pas si c'est la dépendance de mon navigateur / machine) alors que vous êtes censé prendre en charge au moins jusqu'àn=1000
.n=1000
si vous utilisez par exemplenode --stack_size=8000
.05AB1E ,
98 octets-1 octet grâce à l' astuce facteur principal de Leaky Nun dans sa réponse Pyth
Essayez-le en ligne!
Explication
Solution alternative à 8 octets (qui ne fonctionne pas sur TIO)
et ofc alternative 9 octets solution (qui fonctionne sur TIO)
la source
Rétine ,
3124 octets7 octets grâce à Martin Ender.
Essayez-le en ligne!
Comment ça fonctionne
Le regex
/^(1+)\1+$/
capture le plus grand diviseur propre d'un certain nombre représenté en unaire. Dans le code, le\1+
est transformé en une syntaxe d'anticipation.la source
Mathematica, 30 octets
la source
Pyth ,
1398 octets1 octet grâce à jacoblaw.
Suite de tests .
Comment ça fonctionne
Le plus grand diviseur propre est le produit des facteurs premiers sauf le plus petit.
la source
Python 2 (PyPy) ,
737170 octetsPas la réponse Python la plus courte, mais cela passe simplement par les cas de test. TIO gère les entrées jusqu'à 30 000 000 sans transpirer; mon ordinateur de bureau gère 300 000 000 en une minute.
Au prix de 2 octets , la condition
n>d
pourrait être utilisée pour une accélération de ~ 10%.Merci à @xnor pour l'
r=[0]*n
idée, qui a économisé 3 octets!Essayez-le en ligne!
la source
l=[0]*n
devrait vous permettre de vous débarrasser-2
.exec
tue un peu la vitesse, mais même unewhile
boucle serait plus courte que mon approche.Haskell,
484643 octetsEssayez-le en ligne!
Modifier: @rogaos a enregistré deux octets. Merci!
Edit II: ... et @xnor 3 autres octets.
la source
f 2=1 f n=last[d|d<-[1..n-1],mod n d<1]+f(n-1)
sum
, j'ai donc pensé qu'elle n'était pas plus courte.until
en économise plus:until((<1).mod n)pred(n-1)+f(n-1)
Japt ,
8 + 2 = 1086 octetsEssaye-le
Explication
la source
-x
compte pour deux octets selon cet article . Cependant, je pense que vous pouvez enregistrer un octet avecò2_â1 o
(â
exclut le numéro d'origine lorsque donné un argument)â
l'argument de moi m'a permis d'économiser.õ Å
avant et trouvé un couple 8 et 9-byters:õ Åx_/k g
,õ Åx_k Å×
,õ Åx_â¬o
. Et en combinantõ
etÅ
avec votrexo
astuce de génie, j'ai trouvé une solution à 7 octets :-)MATL, 12 octets
Essayez-le sur MATL Online
Explication
la source
PHP , 56 octets
Essayez-le en ligne!
la source
Prolog (SWI) , 72 octets
Essayez-le en ligne!
la source
Cubix , 27
39octetsEssayez-le en ligne!
Cubifié
Regardez-le courir
0IU
Configurez la pile avec un accumulateur et l'entier de départ. Demi-tour dans la boucle extérieure:(?
dupliquer le haut actuel de la pile, décrémenter et tester\pO@
si zéro boucle autour du cube vers un miroir, saisissez le bas de la pile, sortez et arrêtez%\!
si positif, modifiez, relectez et testez.u;.W
si véridique, demi-tour, supprimez le résultat du mod et changez de voie dans la boucle intérieureU;p+qu;;\(
si falsey, demi-tour, supprimer le résultat du mod, amener l'accumulateur en haut, ajouter le diviseur entier actuel (haut) pousser en bas et demi-tour. Nettoyez la pile pour n'avoir que l'accumulateur et l'entier actuel, décrémentez l'entier et entrez à nouveau dans la boucle externe.la source
C # (.NET Core) ,
7472 octetsEssayez-le en ligne!
la source
break
au golfj=0
.En fait , 12 octets
Essayez-le en ligne!
la source
Python 3 ,
78 75 7371 octetsPas même proche de la réponse de Leaky nun en python en nombre d'octets.
Essayez-le en ligne!
la source
Python 3 ,
696359 octets4 octets grâce à Dennis.
Essayez-le en ligne!
J'ai défini la limite de récursivité à 2000 pour que cela fonctionne pour 1000.
la source
Fusain , 37 octets
Essayez-le en ligne!
Le lien est vers la version détaillée. Il m'a fallu presque toute la journée pour trouver comment résoudre une question non liée à l'art ASCII dans Charcoal, mais j'ai finalement compris et je suis très fier de moi. :-RÉ
Oui, je suis sûr que cela peut être joué beaucoup. Je viens de traduire ma réponse C # et je suis sûr que les choses peuvent être faites différemment dans Charcoal. Au moins, cela résout l'
1000
affaire en quelques secondes ...la source
Pari / GP ,
3630 octetsEssayez-le en ligne!
la source
Python 2 (PyPy) , 145 octets
Parce que transformer des compétitions de code-golf en compétitions de code les plus rapides est amusant, voici un algorithme O ( n ) qui, sur TIO, résout n = 5 000 000 000 en 30 secondes. ( Le tamis de Dennis est O ( n log n ).)
Essayez-le en ligne!
Comment ça fonctionne
Nous comptons la taille de l'ensemble
S = {( a , b ) | 2 ≤ a ≤ n , 2 ≤ b ≤ le plus grand diviseur propre ( a )},
en le réécrivant comme l'union, sur tous les nombres premiers p ≤ √n, de
S p = {( p ⋅ d , b ) | 2 ≤ d ≤ n / p , 2 ≤ b ≤ d },
et en utilisant le principe d'inclusion-exclusion :
| S | = ∑ (−1) m - 1 | S p 1 ∩ ⋯ ∩ S p m | sur m ≥ 1 et les nombres premiers p 1 <⋯ < p m ≤ √n,
où
S p 1 ∩ ⋯ ∩ S p m = {( p 1 ⋯ p m ⋅ e , b ) | 1 ≤ e ≤ n / ( p 1 ⋯ p m ), 2 ≤ b ≤ p 1 ⋯ p m - 1 e },
| S p 1 ∩ ⋯ ∩ S p m | = ⌊ n / ( p 1 ⋯ p m ) ⌋⋅ ( p 1 ⋯p m - 1 ⋅ (⌊ n / ( p 1 ⋯ p m ) ⌋ + 1) - 2) / 2.
La somme a C ⋅ n termes non nuls, où C converge vers une constante qui est probablement 6⋅ (1 - ln 2) / π 2 ≈ 0,186544. Le résultat final est alors | S | + n - 1.
la source
NewStack , 5 octets
Heureusement, il y a en fait un système intégré.
La panne:
En anglais réel:
Exécutons un exemple pour une entrée de 8.
Nᵢ
: Faites la liste des nombres naturels de 1 à 8:1, 2, 3, 4, 5, 6, 7, 8
;
: Calculez les plus grands facteurs:1, 1, 1, 2, 1, 3, 1, 4
q
. Supprimez le premier élément:1, 1, 2, 1, 3, 1, 4
Σ
Et prenez la somme:1+1+2+1+3+1+4
=13
la source
1+1+2+1+3+1+4
=13
pas8
. A part ça: bonne réponse donc +1.Java 8,
787472 octetsPort de la réponse C # de @CarlosAlejo .
Essayez-le ici.
Ancienne réponse (78 octets):
Essayez-le ici.
Explication (de l'ancienne réponse):
la source
Lua , 74 octets
Essayez-le en ligne!
la source
J , 18 octets
Essayez-le en ligne!
la source
Empilé , 31 octets
Essayez-le en ligne! (Tous les tests, sauf 1000, qui dépasse le délai de 60 secondes en ligne.)
Explication
la source
C (gcc) , 53 octets
Essayez-le en ligne!
Confortablement et passe rapidement tous les cas de test.
la source