Nous pouvons définir la séquence de divisibilité k
d'un nombre n
en trouvant le plus petit entier non négatif k
tel qu'il n+k
n'est pas divisible par k+1
.
Défi
Dans la langue de votre choix, écrivez un programme ou une fonction qui génère ou renvoie la séquence de divisibilité de votre entrée.
Exemples:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
La Streak de Divisibilty 13
est -4
n=120:
120 is divisible by 1
121 is not divisible by 2
La Streak de Divisibilty 120
est -1
Cas de test:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Plus de cas de test peuvent être trouvés ici .
Remarques
- Basé sur le problème 601 du projet Euler
- Cette séquence peut être trouvée sur OEIS , décalée de 1 vers le bas.
Règles
- Vous pouvez supposer que l'entrée est supérieure à 1.
Notation
code-golf : la soumission avec le score le plus bas gagne.
k + 1
est 2, oùk
est le plus petit entier positif. Désolé pour le nitpick.k
qui ne se divise pasn-1
?n=7
oùk=3
:n-1
est divisible park
.+1
.Réponses:
Pyth ,
65 octetsEssayez-le en ligne!
la source
Java 8,
44424139 octetsBiffé 44 est toujours régulier 44; (
-2 octets grâce à @LeakyNun .
-1 octet grâce à @TheLethalCoder .
-2 octets grâce à @Nevay .
Explication:
Essayez ici.
la source
Haskell , 35 octets
Essayez-le en ligne!
L'utilisation
until
est également de 35 octetsla source
Coque , 7 octets
Essayez-le en ligne!
la source
05AB1E ,
7 à6 octetsEssayez-le en ligne!
Solutions alternatives à 7 octets:
<DLÖγнg
Ls<ÑKн<
la source
JavaScript (ES6), 28 octets
Essaye-le
la source
Mathematica,
3027 octetsUne fonction sans nom qui prend un argument entier.
Essayez-le sur Wolfram Sandbox
Usage:
la source
Perl 5 ,
2321 + 1 (-p) = 22 octetsEssayez-le en ligne!
la source
Python 2 , 35 octets
Essayez-le en ligne!
la source
Cubix , 17 octets
Essayez-le en ligne!
Cubifié
I1
configurer la pile avec entrée et diviseur%?
faire du mod et tester;)qU)uqU
si 0, supprimez le résultat et incrémentez l'entrée et le diviseur. Un petit détour pour revenir à%
/;(O@
sinon 0, baisse le résultat, décrémente le diviseur, sortie et sortieRegardez-le courir
la source
Python 2 ,
4341 octetsEnregistré 2 octets grâce à Leaky Nun !
Essayez-le en ligne!
Python 2 , 40 octets
Essayez-le en ligne!
la source
Python 2 ,
4440 octets-4 octets grâce à Leaky Nun.
Essayez-le en ligne!
la source
Swift 4 , 56 octets
Il s'agit d'une fonction complète
f
, avec un paramètre entieri
qui imprime la sortie.Essayez ici.
Swift 4 , 56 octets
Il s'agit d'une fonction anonyme qui renvoie le résultat.
Essayez ici.
Découvrez la suite de tests!
la source
C # (Mono) ,
4139 octetsEssentiellement un portage de la réponse Java 8 de @Kevin Cruijssen avec plus de golf.
Essayez-le en ligne!
la source
dc , 28 octets
Essayez-le en ligne!
Cela semble vraiment sous-optimal, avec l'incrémentation et la décrémentation finale, mais je ne vois pas vraiment de moyen de l'améliorer. Fondamentalement, nous incrémentons simplement un compteur
i
et notre valeur de départ tant que la valeur modi
continue d'être nulle, et une fois que ce n'est pas vrai, nous soustrayons uni
et imprimons.la source
Gaia , 8 octets
Essayez-le en ligne!
Explication
la source
J, 17 octets
Essayez-le en ligne!
Je pense qu'il y a encore de la place pour le golf ici.
Explication (non golfée)
Le cap (
[:
) est là pour s'assurer que J ne traite pas le dernier verbe ({.@I.
) comme faisant partie d'un crochet.La seule sorte de chose étrange à propos de cette réponse est que cela
I.
double en fait l'index de chaque nombre non nul autant de fois que la valeur de ce nombre. par exempleMais cela n'a pas d'importance puisque nous voulons de toute façon le premier index (et comme cela
i.
donne une plage ascendante, nous savons que le premier index sera la plus petite valeur).Enfin, voici une très courte preuve qu'il est possible de vérifier la division uniquement jusqu'à
n
.Nous commençons à vérifier la divisibilité avec
1 | n
, donc en supposant que la séquence va aussi loin, une fois que nous aurons vérifié la divisibilité parn
nous-mêmes,n | 2n - 1
ce qui ne sera jamais vrai (2n - 1 ≡ n - 1 (mod n)
). Par conséquent, la séquence se terminera là.la source
Japt , 7 octets
Testez-le en ligne!
la source
Code machine x86, 16 octets
La fonction ci-dessus prend un seul paramètre
n
, dans leECX
registre. Il calcule sa séquence de divisibiliték
et la renvoie via leEAX
registre. Il est conforme à la convention d'appel Fastcall 32 bits , il est donc facilement appelable à partir du code C à l'aide de compilateurs Microsoft ou GNU.La logique est assez simple: il ne fait qu'un test itératif à partir de 1. Il est fonctionnellement identique à la plupart des autres réponses ici, mais optimisé à la main pour la taille. Beaucoup de belles instructions sur 1 octet, y compris
INC
,DEC
,CDQ
etXCHG
. Les opérandes codés en dur pour la division nous ont fait un peu mal, mais pas terriblement.Essayez-le en ligne!
la source
PHP , 34 octets
Essayez-le en ligne!
Assez simple. Vérifie le reste de la division (mod) de chaque boucle tout en incrémentant chaque valeur, sort lorsque le nombre n'est plus divisible.
la source
SOGL V0.12 , 8 octets
Essayez-le ici!
Pas mal pour une langue qui est faite pour un type de défis complètement différent.
Explication:
la source
Mathematica, 40 octets
Essayez-le en ligne! (Mathématiques)
Approche mathématique, n + k est divisible par k + 1 si et seulement si n-1 est divisible par k + 1. Et n-1 n'est pas divisible par n, donc
Range@#
c'est assez de nombres.À l'origine, j'ai l'intention d'utiliser
Min@Complement[Range@#,Divisors[#-1]]-1&
, mais cela fonctionne aussi.la source
Julia 0.6.0
(47 octets)(38 octets)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Essayez-le en ligne!
9 octets ont été coupés grâce à Mr.Xcoder
la source
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 octets
Essayez-le en ligne!
la source
i--
place den=i-1
Lot, 70 octets
Tout ce qu'il y a à faire, c'est de trouver le plus grand
i
quiLCM(1..i)
divisen-1
.la source
R , 43 octets
Fonction anonyme.
Vérifiez tous les cas de test!
la source
Aceto ,
2827 octetsJe pourrais économiser un octet si je n'ai pas à quitter.
Explication:
Nous utilisons trois piles: la pile de gauche contient un compteur commençant à 2, celle de droite contient le nombre donné (ou ses incréments), la pile centrale est utilisée pour effectuer les opérations modulo. Nous pourrions, bien sûr, tout faire dans une seule pile, mais de cette façon, nous pouvons définir les piles externes comme «collantes» (les valeurs qui sont sautées ne sont pas vraiment supprimées) et nous éviter de nombreuses opérations de duplication. Voici la méthode en détail:
Lisez un entier, incrémentez-le, rendez la pile courante collante et "déplacez-la" (et nous-mêmes) vers la pile de gauche:
Allez encore une pile vers la gauche, poussez un littéral 2, rendez cette pile collante aussi. Rappelez-vous cette position dans le code (
@
) et "déplacez" une valeur et nous-mêmes vers la pile centrale.Maintenant, nous testons: le modulo des deux premiers nombres n'est-il pas 0? Si c'est le cas, passez à la fin, sinon allez une pile vers la droite, incrémentez et poussez la valeur et nous au milieu. Ensuite, allez dans la pile de gauche, incrémentez-la également et revenez à la marque que nous avons définie auparavant.
Lorsque le résultat du modulo n'était pas nul, nous inversons la position de l'IP, allons d'une pile vers la gauche (où réside notre compteur), décrémentons-la et imprimons la valeur, puis sortons.
la source
Rubis,
343231 octetsUne lambda récursive. Encore nouveau pour Ruby, les suggestions sont donc les bienvenues!
Essayez-le en ligne!
la source
F #,
86 octets84 octetsEssayez-le en ligne!
Edit: -2 personnages d'Oliver
la source
r = if
?Befunge , 19 octets
Essayez-le en ligne!
la source