Accélérer et/ou simplifier une macro

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bcar
Le #24429741
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


Michel__D
Le #24429861
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





Tatanka
Le #24429851
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"
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





Tatanka
Le #24429841
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"
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




Tatanka
Le #24429881
Et voici la liste des 88 nombres narcissiques :

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

A+
Serge
Tatanka
Le #24430391
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
Fredo P.
Le #24430611
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"Tatanka" 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

Tatanka
Le #24430661
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."
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"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





bcar
Le #24431191
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"
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










Fredo P.
Le #24431241
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" 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." news: jn9nts$s6b$
Bonjour Serge
une p'tit question
à quoi sert un nombre narcissique?

"Tatanka" 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









Publicité
Poster une réponse
Anonyme