Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Accélérer et/ou simplifier une macro

16 réponses
Avatar
Tatanka
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge

10 réponses

1 2
Avatar
bcar
Avec la définition que tu donnes, j'ai l'impression que
si 153 est un nombre narcissique alors
135, 531, 513, 351 et 315 le sont aussi, non ?

Si c'est le cas, je ne vois pas d'ou sort le 88, puisque rien qu'avec
les permutations de 548834 on doit dépasser ce nombre.

si les permutations ne sont pas autorisées, quelle est la règle pour
définir quelle est la bonne ? (cela peut être important pour tes
optimisations).

Le 25/04/2012 17:35, Tatanka a écrit :
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge


Avatar
Michel__D
Bonjour,

Hum, 153 = 1^3 + 5^3 + 3^3

Donc 135, 531, 513, 351 et 315 étant différent de 153 ils ne peuvent pas être narcissiques (si j'ai bien compris).

bcar a écrit :
Avec la définition que tu donnes, j'ai l'impression que
si 153 est un nombre narcissique alors
135, 531, 513, 351 et 315 le sont aussi, non ?

Si c'est le cas, je ne vois pas d'ou sort le 88, puisque rien qu'avec
les permutations de 548834 on doit dépasser ce nombre.

si les permutations ne sont pas autorisées, quelle est la règle pour
définir quelle est la bonne ? (cela peut être important pour tes
optimisations).

Le 25/04/2012 17:35, Tatanka a écrit :
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge





Avatar
Tatanka
Salut "bcar",

153 est narcissique car 153 = 1^3 + 5^3 + 3^3
mais 135, 531, 513, 315 et 351 ne le sont pas car
si tu fais la somme des cubes de chacun de leurs chiffres,
tu obtiendras toujours 153.

Serge

"bcar" a écrit dans le message de news: jn96kh$i3t$
Avec la définition que tu donnes, j'ai l'impression que
si 153 est un nombre narcissique alors
135, 531, 513, 351 et 315 le sont aussi, non ?

Si c'est le cas, je ne vois pas d'ou sort le 88, puisque rien qu'avec
les permutations de 548834 on doit dépasser ce nombre.

si les permutations ne sont pas autorisées, quelle est la règle pour
définir quelle est la bonne ? (cela peut être important pour tes
optimisations).

Le 25/04/2012 17:35, Tatanka a écrit :
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge





Avatar
Tatanka
Salut Michel,

153 = 1^3 + 5^3 + 3^3, donc narcissique. Mais
135 n'est pas égal à 1^3 + 3^3 + 5^3 (153)
531 n'est pas égal à 5^3 + 3^3 + 1^3 (153)
135 n'est pas égal à 1^3 + 3^3 + 5^3 (153)
...

Serge


"Michel__D" a écrit dans le message de news: jn992g$ge4$
Bonjour,

Hum, 153 = 1^3 + 5^3 + 3^3

Donc 135, 531, 513, 351 et 315 étant différent de 153 ils ne peuvent pas être narcissiques (si j'ai bien compris).

bcar a écrit :
Avec la définition que tu donnes, j'ai l'impression que
si 153 est un nombre narcissique alors
135, 531, 513, 351 et 315 le sont aussi, non ?

Si c'est le cas, je ne vois pas d'ou sort le 88, puisque rien qu'avec
les permutations de 548834 on doit dépasser ce nombre.

si les permutations ne sont pas autorisées, quelle est la règle pour
définir quelle est la bonne ? (cela peut être important pour tes
optimisations).

Le 25/04/2012 17:35, Tatanka a écrit :
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge




Avatar
Tatanka
Et voici la liste des 88 nombres narcissiques :

http://mathworld.wolfram.com/NarcissisticNumber.html

A+
Serge
Avatar
Tatanka
Bonsoir,

J'ai trouvé plus simple comme macro mais elle est
encore plus lente que la première !

Sub Nombres_Narcissiques2()
Dim s As Long
For i = 10000000 To 99999999
For j = 1 To 8
s = s + Mid(i, j, 1) ^ 8
Next j
If s = i Then
k = k + 1
Cells(k, 1) = i
End If
s = 0
Next i
End Sub

Serge
Avatar
Fredo P.
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"Tatanka" a écrit dans le message de news:
jn9kao$i8g$
Bonsoir,

J'ai trouvé plus simple comme macro mais elle est
encore plus lente que la première !

Sub Nombres_Narcissiques2()
Dim s As Long
For i = 10000000 To 99999999
For j = 1 To 8
s = s + Mid(i, j, 1) ^ 8
Next j
If s = i Then
k = k + 1
Cells(k, 1) = i
End If
s = 0
Next i
End Sub

Serge

Avatar
Tatanka
Salut Fredo,

Pour le moment, à ce que je sache, à rien :-)
Beaucoup de mathématiciens ne pensent qu'à s'amuser !
Les spécialistes de la théorie des nombres du début du 20e siècle
juraient que ça ne servirait jamais à rien de tripoter les nombres
premiers mais aujourd'hui, c'est un des outils indispensables pour
la sécurité informatique...

Serge



"Fredo P." a écrit dans le message de news: jn9nts$s6b$
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"Tatanka" a écrit dans le message de news: jn9kao$i8g$
Bonsoir,

J'ai trouvé plus simple comme macro mais elle est
encore plus lente que la première !

Sub Nombres_Narcissiques2()
Dim s As Long
For i = 10000000 To 99999999
For j = 1 To 8
s = s + Mid(i, j, 1) ^ 8
Next j
If s = i Then
k = k + 1
Cells(k, 1) = i
End If
s = 0
Next i
End Sub

Serge





Avatar
bcar
Désolé, la fatigue...

Le 25/04/2012 18:46, Tatanka a écrit :
Salut Michel,

153 = 1^3 + 5^3 + 3^3, donc narcissique. Mais
135 n'est pas égal à 1^3 + 3^3 + 5^3 (153)
531 n'est pas égal à 5^3 + 3^3 + 1^3 (153)
135 n'est pas égal à 1^3 + 3^3 + 5^3 (153)
....

Serge


"Michel__D" a écrit dans le message de news: jn992g$ge4$
Bonjour,

Hum, 153 = 1^3 + 5^3 + 3^3

Donc 135, 531, 513, 351 et 315 étant différent de 153 ils ne peuvent pas être narcissiques (si j'ai bien compris).

bcar a écrit :
Avec la définition que tu donnes, j'ai l'impression que
si 153 est un nombre narcissique alors
135, 531, 513, 351 et 315 le sont aussi, non ?

Si c'est le cas, je ne vois pas d'ou sort le 88, puisque rien qu'avec
les permutations de 548834 on doit dépasser ce nombre.

si les permutations ne sont pas autorisées, quelle est la règle pour
définir quelle est la bonne ? (cela peut être important pour tes
optimisations).

Le 25/04/2012 17:35, Tatanka a écrit :
Bonjour,

Content de savoir que le MPFE est toujours vivant
et que ça collabore encore.
Depuis que j'ai attrapé la fièvre Facebook, j'ai délaissé
Excel mais là j'aurais une tite question pour vous.
Je suis à la recherche des nombres narcissiques !
Un nombre narcissique contenant n chiffres est un nombre
égal à la somme de chacun de ses chiffres à la n ième puissance.
Exemples :
153 = 1^3 +5^3 + 3^3
1634 = 1^4 + 6^4 + 3^4 + 4^4
548 834 = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6
Il en existe seulement 88.
Voici une macro me permettant de trouver des nombres
narcissiques contenant 8 chiffres. Elle m'a permis d'en trouver trois
mais je me demande si je pourrais l'accélérer (19 minutes) ou la simplifier.
La voici et je vous remercie à l'avance :

Sub Nombres_Narcissiques()
Dim T As Double
T = Timer
Dim x(1 To 8) As Long
For i = 10000000 To 99999999
For j = 1 To 8
x(j) = Mid(i, j, 1)
Next j
If x(1) ^ 8 + x(2) ^ 8 + x(3) ^ 8 + x(4) ^ 8 + x(5) ^ 8 + x(6) ^ 8 + x(7) ^ 8 + x(8) ^ 8 = i Then
k = k + 1
Cells(k, 1) = i
End If
Next i
Range("B1") = Application.Round((Timer - T), 1) & " Sec"
End Sub

Serge










Avatar
Fredo P.
Merci pour l'info
Ma bécane, avec la première routine exposée m'est 596 sec pour sortir
24678050
24678051
88593477


Mémoire DDR3 PC3-10666 2 Go 1333 Mhz
Carte mère MSI GF615M P33 - Socket AM3 pour processeur AMD Sempron AM3

"Tatanka" a écrit dans le message de news:
jn9pe6$hj$
Salut Fredo,

Pour le moment, à ce que je sache, à rien :-)
Beaucoup de mathématiciens ne pensent qu'à s'amuser !
Les spécialistes de la théorie des nombres du début du 20e siècle
juraient que ça ne servirait jamais à rien de tripoter les nombres
premiers mais aujourd'hui, c'est un des outils indispensables pour
la sécurité informatique...

Serge



"Fredo P." a écrit dans le message de
news: jn9nts$s6b$
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"Tatanka" a écrit dans le message de news:
jn9kao$i8g$
Bonsoir,

J'ai trouvé plus simple comme macro mais elle est
encore plus lente que la première !

Sub Nombres_Narcissiques2()
Dim s As Long
For i = 10000000 To 99999999
For j = 1 To 8
s = s + Mid(i, j, 1) ^ 8
Next j
If s = i Then
k = k + 1
Cells(k, 1) = i
End If
s = 0
Next i
End Sub

Serge









1 2