Défi
Imaginons un N
-tuple d'entiers compris entre 0 et M
inclus, et appelons-le F
.
Il y a (M + 1) ** N
des F
s possibles au total.
Combien de ces F
valeurs satisfont à toutes les inégalités suivantes (l'indice est à base unique)?
F[n] + F[n+1] <= M
pour1 <= n < N
F[N] + F[1] <= M
Ecrire un programme ou une fonction qui prend deux nombres entiers positifs N
et M
et fournit la réponse sous quelque forme que pratique.
Cas de test
(N,M) => Answer
(1,1) => 1
(2,1) => 3
(3,1) => 4
(4,1) => 7
(1,2) => 2
(2,2) => 6
(3,2) => 11
(4,2) => 26
(10,3) => 39175
(10,4) => 286555
(10,5) => 1508401
(25,3) => 303734663372
(25,4) => 43953707972058
(25,5) => 2794276977562073
(100,3) => 8510938110502117856062697655362747468175263710
(100,4) => 3732347514675901732382391725971022481763004479674972370
(100,5) => 60964611448369808046336702581873778457326750953325742021695001
Explication
M (max value of element) = 1
F[1] + F[1] <= 1; F = [0]
(1,1) => 1
F[1] + F[2] <= 1; F = [0,0], [0,1], [1,0]
(2,1) => 3
F = [0,0,0], [0,0,1], [0,1,0], [1,0,0]
(3,1) => 4
F = [0,0,0,0], [0,0,0,1], [0,0,1,0], [0,1,0,0], [0,1,0,1], [1,0,0,0], [1,0,1,0]
(4,1) => 7
---
M = 2
F[1] + F[1] <= 2; F = [0], [1]
(1,2) => 2
F = [0,0], [0,1], [0,2], [1,0], [1,1], [2,0]
(2,2) => 6
F = [0,0,0], [0,0,1], [0,0,2], [0,1,0], [0,1,1], [0,2,0], [1,0,0], [1,0,1],
[1,1,0], [1,1,1], [2,0,0]
(3,2) => 11
(4,2) => 26 (left as exercise for you)
Règles
- Il s'agit d'un défi de complexité limitée . La complexité temporelle de votre code doit être polynomiale
M
etN
(par exemple, vous ne pouvez pas générer tous les(M + 1) ** N
tuples, puis vérifier la condition). Veuillez expliquer votre approche dans votre soumission. - Les règles de code-golf standard s'appliquent. La réponse la plus courte en octets l'emporte.
mat(...,int)
ne semble pas fonctionner pour lesn=100
cas. La méthode est correcte (utiliser sympy pour additionner les puissances des racines du polynôme caractéristique fonctionne, par exemple), mais numpy va mal quelque part lorsque les nombres augmentent (peut-être que c'est l'**
opérateur de puissance?)