[HS] Distraction numérique
Le
Tatanka

Bonjour,
Il existe un seul nombre entier positif (Pierre de Fermat) tel que
celui qui le précède est un carré et celui qui le suit est un cube.
Quelle serait la plus courte macro permettant de le débusquer ?
En souvenir de la plus courte formule :-)
Serge
Il existe un seul nombre entier positif (Pierre de Fermat) tel que
celui qui le précède est un carré et celui qui le suit est un cube.
Quelle serait la plus courte macro permettant de le débusquer ?
En souvenir de la plus courte formule :-)
Serge
je n'ai peut être pas compris la donne mais selon ma compréhension, un seul j'en doute... n(2,5,17,26,50,65...)
=ET(MOD(RACINE(A1-1);ENT(RACINE(A1-1)))=0;MOD((A1+1)*(1/3);ENT((A1+1)*(1/3)))=0)
If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then
isabelle
Le 2010-08-01 17:22, Tatanka a écrit :
je ne vois que 26
soit le précède 25 carré (d'un nombre entier) 5
et le suit 27 cube (d'un entier) 3
--
LSteph
On 2 août, 05:21, isabelle
Tu as très bien compris la question et moi j'ai compris que tu voulais écrire ^ plutôt que * dans :
If ((n - 1) * (1 / 2)) Mod Int((n - 1) * (1 / 2)) = 0 And (n + 1) * (1 / 3) Mod Int((n + 1) * (1 / 3)) = 0 Then
Voici une solution ne contenant que 72 caractères sans compter les espaces :
Sub Fermat_Serge()
Do
n = n + 1
a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)
If Int(a) = a And Int(b) = b Then Exit Do
Loop
[a1] = n
End Sub
Mais curieusement :
Sub Fermat_Isabelle()
Do
n = n + 1
a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)
If (a Mod Int(a) = 0) And (b Mod Int(b)) = 0 Then Exit Do
Loop
[a1] = n
End Sub
ne fonctionne pas!
Por qué?
A--
Serge
"isabelle"
C'est bien cela mais heureusement que c'est un petit nombre :-)
Quant à démontrer que c'est le seul, c'est une toute autre histoire!
A--
Serge
"LSteph" Bonjour,
je ne vois que 26
soit le précède 25 carré (d'un nombre entier) 5
et le suit 27 cube (d'un entier) 3
--
LSteph
On 2 août, 05:21, isabelle
Sub Fermat_Isabelle()
Do
n = n + 1
a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)
If (a Mod Int(a) = 0) And (b Mod Int(b) = 0) Then Exit Do
Loop
[a1] = n
End Sub
mais ça ne fonctionne pas non plus!
"Tatanka"
Isolons le cas ou a=0 pour la division donc on commence à 2 et
prenons en compte la différence entre l'entier et le décimal pour
cela
forcer le type au moins à single sinon on aura un variant et
interpreté comme un entier
Sub Fermat_Steph()
Dim a As Single, n As Single, b As Single
n = 2
test = False
Do
a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)
If (a - Int(a) = 0) And (b - Int(b) = 0) Then test = True:
Exit Do
n = n + 1
Loop While test = False
[a1] = n
End Sub
On 2 août, 14:54, "Tatanka"
(si déjà entre 2 et 65536 il n'y a que 26 ....)
Sub aVeriFermat_Steph()
Dim a As Single, n As Single, b As Single
n = 2
test = False
Do
a = (n - 1) ^ 0.5
b = (n + 1) ^ (1 / 3)
If (a - Int(a) = 0) And (b - Int(b) = 0) Then
[a65536].End(xlUp)(2) = n
Else
[a65536].End(xlUp)(2) = "---"
End If
n = n + 1
Loop While n < 65536
End Sub
On 2 août, 14:40, "Tatanka"
Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a)).
Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a).
Ce qui explique la défaillance de la macro Fermat_Isabelle.
Quand même curieux que le modulo du VBA ne soit pas identique
au modulo d'une feuille de calcul!
Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?
Serge
"Tatanka"
La question n'est pas là du tout, dans ta feuille les décimales sont
considérées
dans un code ou tu ne le précise pas elle ne le sont pas
( tu n'as pas déclaré le type de ta variable single ou double) ainsi
ton nombre est un variant celui ci rinterpreté comme un nombre est
traduit en entier
un nombre décimal arrondi à l'entier
moins la valeur de ce nombre arrondi à l'entier
ca fera toujours zero
pareil pour le mod ou la différence
si tu avais a=0.023 et que la valeur de a est interpretée
a prend pour valeur 0
0-0=0
avec un msgbox il y a encore une autre raison mais le principe est le
même
c'est pour illustrer cela
si dans ta boucle initiale(avant la correction que je t'ai proposé)
démarre qd même à n=2 pour éviter le n-1=0
tu mets
msgbox n &" - "& a &" - "& b
tu obtiens 2 - 1 - 1
alors que b devrait etre la racine cubique de 3
soit tu aurais 2 - 1 - 1.4422
On 2 août, 17:27, "Tatanka"
Les concepteurs - programmeurs des fonctions de la feuille de calcul ne sont pas les mêmes que ceux des fonctions
appartenant aux VBA. En conséquence, il y a des petites différences...
Un autre exemple :
Feuille de calcul : =Arrondi(6.65;1) retourne 6.7
En VBA = Round(6.65,1) retourne 6.6
Les 2 fonctions réfèrent à des codes différents -> ce sont 2 fonctions différentes.
Celle en VBA est déficiente dans l'exemple donné.
Il vaut mieux utiliser = Application.WorksheetFunction.Round(6.65,1)
sachant que Application.WorksheetFunction utilise les fonctions de la feuille de calcul
--
MichD
--------------------------------------------
"Tatanka" i36o4t$9n6$
Bizz!
Sur une feuille de calcul, a-ENT(a) est toujours égal à MOD(a;ENT(a)).
Par contre, en VBA, a-Int(a) n'est pas toujours égal à a Mod Int(a).
Ce qui explique la défaillance de la macro Fermat_Isabelle.
Quand même curieux que le modulo du VBA ne soit pas identique
au modulo d'une feuille de calcul!
Quelqu'un peut-il m'expliquer l'intérêt d'une telle chose?
Serge
"Tatanka"