Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#51 Re : Programmation » Période de quotients de fractions.Curiosité. » 06-08-2024 13:59:30
Bonjour,
Curiosité encore:
Y aurait-il une période au multiplicateur que je cherche pour contrôler son produit.après qu’il ai été multiplié par le multiplicande
Autrement dit:
un multiplicande (23) multiplié par un multiplicateur (que je cherche)= un produit composé que, seulement, de 3 (par exemple) ?
Il m’aura fallu pas mal de temps pour traduire en python un algorithme capable de répondre à mes attentes. (Mais, somme toute, ce fut amusant).
Ben oui on remarque une période dans le multiplicateur.
Le voici :
i=23 # à partir de
p=3 #période
x,y,sol=[],[],[]
q,f=p,0
rep=0
for Z in range(0,10):
z=str(Z*i)
y.append(int(z))
x.append(int(z[-1]))
R,Sol=[0],[0]
while f<50:
r=0
w=(x.index(q))
#print("index",w)
sol.insert(0,w)
#print("sol",sol)
v=str(y[w])
u=list(v)
u.insert(0,str(0))
u.insert(0,str(0))
u.insert(0,str(0))
R.append(u[-3])
b=int(u[-2])+int(rep)+int(R[-2])
for r in range(p,90+p,10):
if b<=r :
rep=int(r/10)
q=r-b
break
f+=1
L=''
for G in sol:
L=L+str(G)
L=int(L)
print("solution = ",L)
T=L*i
print("solution *",i,"=", T)
print("--------------------------------------------------")
Ce qui donne :
solution = 5797101449275362318840579710144927536231884057971
solution * 23 = 133333333333333333333333333333333333333333333333333
--------------------------------------------------
Et on remarque (144927536231884057971) à partir du premier 0
144927536231884057971 * 23 =
3333333333333333333333
renéb
P S : Comment faire pour que le code soit plus joli.
#52 Re : Programmation » Période de quotients de fractions.Curiosité. » 23-07-2024 21:18:59
re',
Quelques questions:
from decimal import Decimal as D, getcontext
getcontext().prec=104
pourquoi 104?
fin=96
96 ?
En tous cas divmod(x,y) semble génial.
rb
#53 Re : Programmation » Période de quotients de fractions.Curiosité. » 23-07-2024 21:09:51
bonsoir,
Tu trouves plusieurs périodes ?...
non pas plusieurs périodes mais bien leurs points d'amorce qui peut être au nombre d'éléments de la période.
L'amorce peut se faire à partir de n'importe quelle décimale pour autant qu'elle soit suffisamment éloignée de la partie entière de la fraction.
La fin d'une période est suivie immédiatement de la même : elles s'enchaînent sans espaces, c'est la définition de la période...
C'est bien ce qui est indiquer dans "recouvrement de la série" de l'exemple ci-dessus.
A bientôt
rb
#54 Re : Programmation » Période de quotients de fractions.Curiosité. » 23-07-2024 19:02:27
bonsoir,
J'ai fait tourner la fraction de l'exemple poste #3 à savoir:
avec le code suivant:
##n=input()
##m=input()
n=313689
m=16670
print("fraction:",n," / ",m)
print()
v,w=0,0
num=float(n)
dnom=float(m)
a=list(str(n))
b=list(str(m))
if"." in a:
v=len(a[a.index("."):])-1
if"." in b:
w=len(b[b.index("."):])-1
max=(max(v,w))
num*=10**int(max)
dnom*=10**int(max)
##num=int(num)
##dnom=int(dnom)
print("num",num," / ",dnom,"dnom")
print("num/dnom = ",num/dnom)
sol=[]
v,r=0,0
while v<20000: ############# nbre de décimales voulues ##########################
i=0
while num>dnom:
i+=1
num=num-dnom
sol.append(int(i))
num=num*10
v+=1
print("sol",sol)
print()
####### début de la période #########
inf,sup=[],[]
l=len(sol)
n,p,j,t=1,6,0,30
#### t : espace pour les premières décimales ne rentrant pas dans la période.
#### n=1 pour décaler la première recherche d'égalité.
#### p=largeur de la palette de recherche.
while n<l:
inf=sol[r+t:r+t+p]
sup=sol[r+n+t:r+n+t+p]
if sup==inf:
print("une période = ",sol[r+t:r+t+10],"... ...",sol[r+n+t-10:r+n+t])
print()
break
n+=1
while sol[r+t-j]==sol[r+t+n-j]:
j+=1
print("premiére période ",sol[r+t-j+1:n+r+t-j+1])
print("elle commence à la ",r+t-j+1,"ième position)")
print("d'une longueur de ",len(sol[r+t-j+1:n+r+t-j+1]),"chiffres")
q=(sol[n-5:n+r+t-j+9])
print("recouvrement de la série:",q)
Long code quand même...
comment le rendre plus joli?
Je souhaite naviguer dans le résultat ; il y a des outils qui existent mais je ne les connais et ne les métrise pas trop bien.
( index, pop, keys, items, ...)
Mais je vais me pencher plus avant sur toutes les interventions que vous avez daigner poster.
En vous remerciant, à bientôt.
rb
num,dnom=627378,33340
et je trouve les mêmes résultats ( ouf ! )
fraction: 313689 / 16670
num 313689.0 / 16670.0 dnom
num/dnom = 18.81757648470306
sol: Squeezed text (751 lines)
une période = [5, 0, 2, 0, 9, 9, 5, 8, 0, 0... ... 2, 2, 3, 7, 5, 5, 2, 4, 8, 9]
premiére période [1, 7, 5, 7, 6, 4, 8, 4, 7, 0, 3, 0, 5, 9, 3, 8, 8, 1, 2, 2, 3, 7, 5, 5, 2, 4, 8, 9, 5, 0, 2, 0, 9, 9, 5, 8, 0, 0, 8, 3, 9, 8, 3, 2, 0, 3, 3, 5, 9, 3, 2, 8, 1, 3, 4, 3, 7, 3, 1, 2, 5, 3, 7, 4, 9, 2, 5, 0, 1, 4, 9, 9, 7, 0, 0, 0, 5, 9, 9, 8, 8, 0, 0, 2, 3, 9, 9, 5, 2, 0, 0, 9, 5, 9, 8, 0, 8, 0, 3, 8, 3, 9, 2, 3, 2, 1, 5, 3, 5, 6, 9, 2, 8, 6, 1, 4, 2, 7, 7, 1, 4, 4, 5, 7, 1, 0, 8, 5, 7, 8, 2, 8, 4, 3, 4, 3, 1, 3, 1, 3, 7, 3, 7, 2, 5, 2, 5, 4, 9, 4, 9, 0, 1, 0, 1, 9, 7, 9, 6, 0, 4, 0, 7, 9, 1, 8, 4, 1, 6, 3, 1, 6, 7, 3, 6, 6, 5, 2, 6, 6, 9, 4, 6, 6, 1, 0, 6, 7, 7, 8, 6, 4, 4, 2, 7, 1, 1, 4, 5, 7, 7, 0, 8, 4, 5, 8, 3, 0, 8, 3, 3, 8, 3, 3, 2, 3, 3, 3, 5, 3, 3, 2, 9, 3, 3, 4, 1, 3, 3, 1, 7, 3, 3, 6, 5, 3, 2, 6, 9, 3, 4, 6, 1, 3, 0, 7, 7, 3, 8, 4, 5, 2, 3, 0, 9, 5, 3, 8, 0, 9, 2, 3, 8, 1, 5, 2, 3, 6, 9, 5, 2, 6, 0, 9, 4, 7, 8, 1, 0, 4, 3, 7, 9, 1, 2, 4, 1, 7, 5, 1, 6, 4, 9, 6, 7, 0, 0, 6, 5, 9, 8, 6, 8, 0, 2, 6, 3, 9, 4, 7, 2, 1, 0, 5, 5, 7, 8, 8, 8, 4, 2, 2, 3, 1, 5, 5, 3, 6, 8, 9, 2, 6, 2, 1, 4, 7, 5, 7, 0, 4, 8, 5, 9, 0, 2, 8, 1, 9, 4, 3, 6, 1, 1, 2, 7, 7, 7, 4, 4, 4, 5, 1, 1, 0, 9, 7, 7, 8, 0, 4, 4, 3, 9, 1, 1, 2, 1, 7, 7, 5, 6, 4, 4, 8, 7, 1, 0, 2, 5, 7, 9, 4, 8, 4, 1, 0, 3, 1, 7, 9, 3, 6, 4, 1, 2, 7, 1, 7, 4, 5, 6, 5, 0, 8, 6, 9, 8, 2, 6, 0, 3, 4, 7, 9, 3, 0, 4, 1, 3, 9, 1, 7, 2, 1, 6, 5, 5, 6, 6, 8, 8, 6, 6, 2, 2, 6, 7, 5, 4, 6, 4, 9, 0, 7, 0, 1, 8, 5, 9, 6, 2, 8, 0, 7, 4, 3, 8, 5, 1, 2, 2, 9, 7, 5, 4, 0, 4, 9, 1, 9, 0, 1, 6, 1, 9, 6, 7, 6, 0, 6, 4, 7, 8, 7, 0, 4, 2, 5, 9, 1, 4, 8, 1, 7, 0, 3, 6, 5, 9, 2, 6, 8, 1, 4, 6, 3, 7, 0, 7, 2, 5, 8, 5, 4, 8, 2, 9, 0, 3, 4, 1, 9, 3, 1, 6, 1, 3, 6, 7, 7, 2, 6, 4, 5, 4, 7, 0, 9, 0, 5, 8, 1, 8, 8, 3, 6, 2, 3, 2, 7, 5, 3, 4, 4, 9, 3, 1, 0, 1, 3, 7, 9, 7, 2, 4, 0, 5, 5, 1, 8, 8, 9, 6, 2, 2, 0, 7, 5, 5, 8, 4, 8, 8, 3, 0, 2, 3, 3, 9, 5, 3, 2, 0, 9, 3, 5, 8, 1, 2, 8, 3, 7, 4, 3, 2, 5, 1, 3, 4, 9, 7, 3, 0, 0, 5, 3, 9, 8, 9, 2, 0, 2, 1, 5, 9, 5, 6, 8, 0, 8, 6, 3, 8, 2, 7, 2, 3, 4, 5, 5, 3, 0, 8, 9, 3, 8, 2, 1, 2, 3, 5, 7, 5, 2, 8, 4, 9, 4, 3, 0, 1, 1, 3, 9, 7, 7, 2, 0, 4, 5, 5, 9, 0, 8, 8, 1, 8, 2, 3, 6, 3, 5, 2, 7, 2, 9, 4, 5, 4, 1, 0, 9, 1, 7, 8, 1, 6, 4, 3, 6, 7, 1, 2, 6, 5, 7, 4, 6, 8, 5, 0, 6, 2, 9, 8, 7, 4, 0, 2, 5, 1, 9, 4, 9, 6, 1, 0, 0, 7, 7, 9, 8, 4, 4, 0, 3, 1, 1, 9, 3, 7, 6, 1, 2, 4, 7, 7, 5, 0, 4, 4, 9, 9, 1, 0, 0, 1, 7, 9, 9, 6, 4, 0, 0, 7, 1, 9, 8, 5, 6, 0, 2, 8, 7, 9, 4, 2, 4, 1, 1, 5, 1, 7, 6, 9, 6, 4, 6, 0, 7, 0, 7, 8, 5, 8, 4, 2, 8, 3, 1, 4, 3, 3, 7, 1, 3, 2, 5, 7, 3, 4, 8, 5, 3, 0, 2, 9, 3, 9, 4, 1, 2, 1]
elle commence à la 2 ième position)
d'une longueur de 833 chiffres
recouvrement de la série: [... 9, 3, 9, 4, 1, 2, 1, 1, 7, 5, 7, 6, 4, 8, 4,...]
#55 Re : Programmation » Période de quotients de fractions.Curiosité. » 22-07-2024 22:41:30
Bonsoir,
j'en conclus que tu ne veux rien savoir de ce module decimal...
Que nenni. j'ai tant à apprendre.
L'efficacité du recourt à l'"image" me plait et ne va pas m'empêcher d'essayer de comprendre et de réfléchir à ce que vous me proposez.
#56 Re : Programmation » Période de quotients de fractions.Curiosité. » 21-07-2024 23:22:14
bonsoir,
ces foutus x*10**-20
exagération dues à l'agacement de ces logiques ajouts d' X *10**-Y " , lors d'opérations du genre:
n=25.9
m=n-intn)
print(m)
m= 0.8999999999999986
et pas m = 0.9
c'est sans doute à cause de cette différence (0.8999999999999986 au lieu de 0.9) que le résultat était beaucoup plus élevé
le numérateur était 6227.378 et dans ton rectificatif 627.338
faute de frappe... excuses.
Il faut attendre les 23e et 24e décimales pour trouver le début de la première occurrence de la période.
Voila de quoi m'occuper.
Pour ce qui est de chasser les décimales de la fraction, je passe par l'analyse de son "image" afin de déterminer le nombre de fois qu'il faudra multiplier le numérateur et le dénominateur.
par 10.
Simple et infallible.
A bientôt.
#57 Re : Programmation » Période de quotients de fractions.Curiosité. » 20-07-2024 21:39:31
Hello,
Ben non,
Je suis embêter de devoir rectifier le tir.
A cause de ces foutus x*10**-20 mon code s'est pris les +-*/ dans le tapis.
mais maintenant cela semble plus correcte.
num 627378 / 33340 dnom
num/dnom = 18.81757648470306
sollution en 7501 lignes de chiffres
la période = [5, 5, 2, 4, 8,...1, 2, 2, 3, 7]
longueur = 833.
c'est plus raisonnable.
Bonne fin de journée.
#58 Programmation » Période de quotients de fractions.Curiosité. » 20-07-2024 13:43:46
- renéb
- Réponses : 18
Bonjour,
Comme souvent,une question me vient et je m’y colle, m’y accroche.
Cette fois je me suis demandé si on avait étudier les périodes d’un quotient de deux rationnels.
Pour m’aider à en rencontrer j’ai codé en python un petit algorithme que j(ai le plaisir de partager.
A noter que j’ai dû affronter les x10**- 20 qui « imprécise » le résultat. J’ai résolu à ma manière cette logique imprécision.
Quel fut ma surprise quand j’ai chercher la période du quotient de la fraction suivante :
6227.378 / 33.34
la période est longue de 875448 chiffres.
Sans python, « à la main », j’en aurais pour une éternité…
n=input()
m=input()
##n=6227.378
##m=33.34
v,w=0,0
num=float(n)
dnom=float(m)
a=list(str(n))
b=list(str(m))
if"." in a:
v=len(a[a.index("."):])-1
if"." in b:
w=len(b[b.index("."):])-1
m=(max(v,w))
num*=10**int(m)
dnom*=10**int(m)
num=int(num)
dnom=int(dnom)
print("num",num," / ",dnom,"dnom")
print("num/dnom = ",num/dnom)
sol=[]
v,n,r=0,1,24
while v<2000+r: ############# nbre de décimales = v-1 ##########################
i=0
while num>dnom:
i+=1
num=num-dnom
sol.append(int(i))
num=num*10
v+=1
##print()
print("sol",sol)
print()
####### début de la période #########
inf,sup=[],[]
l=len(sol)
n=1
while n<l:
inf=sol[r-3:r+3]
sup=sol[r+n-3:r+n+3]
li=len(sol[r-3:r+3])
if sup==inf:
print("la période = ",sol[r:r+n])
print("longueur = ",len(sol[r:r+n]))
print(n)
break
n+=1
print("fin")
#59 Re : Café mathématique » Racinne carrée, extraction à la main. inédite? » 18-01-2023 23:30:52
Bonsoir,
"Alors pourquoi es-tu resté scotché à 12 décimales pour l'exponentielle e" ?
Je sais pas, je vois pas, "e" hors sujet je crois.
Pour ce qui est des 12 décimales, elles correspondent à la limite des calculs "float".
J'ai limité à 12 décimales pour pouvoir comparer les résultats calculettes et ceux de l'algorithme car, comme l'indique Glozi il y a un risque de dérapage dans le début de l'extraction de la racine.
https://mail.google.com/mail/u/0?ui=2&i … 58b8c65251
C'est la page qui m'a permis de vérifier les décimales du nombre d'or. (On trouve ce qu'on peut).
Un tout grand merci, Glozi et Yoshi, pour me voir mathématisé un peu plus.
Je regarde tout cela à mon aise... j'ai dèja des épanouissements en vue concernant ces notions à l'étude.
A bientôt.
RB
#60 Programmation » Racine carrée, extraction à la main. inédite? » 18-01-2023 14:37:26
- renéb
- Réponses : 1
Bonjour,
Voici la mise en code de l'algorithme utile à extraire une racine, chiffre par chiffre soumise à votre sagacité.
L’exemple choisi portera sur phi le nombre d’or. $\frac{1+\sqrt5}{2}$
Extraire la racine de 5 et simultanément, de suite (sur le même chiffre) opérer sa division par 2 non sans avoir omis au préalable d’incrémenter d’une unité la valeur entière de la racine.
A bientôt
RB
#!/usr/bin/env python3
from math import *
from time import *
t2=time()
nb1=5 # nb nombre dont on extrait la racine.
div=2 #diviseur du nombre en construction
h=14 #nbre de décimales demandées
solution,o=0,0
r=(nb1)**0.5
nb,nb2=nb1,str(nb1)
sol,phi=[],[]
print("nombre dont on extrait la racine:",nb)
print("résultat calculatrice racine de 5 =",r)
print("nbre de décimales:",h)
s=len(nb2)
##x=int(input("dernier carré entier < les 2 1er chiffres de nb * 10*le nombre de chifrre de nb -2/2 "))
##x=int(x*10**((s-2)/2))
##print(x)
#appel à calculer le "racine" pour poursuivre l'algorythme?
if s>1:
x=int(int(nb1/(10**(s-2)))**0.5)*(10**(int((s-2)/2)))
else:
x=int(nb1**0.5)
print("x=",x)
sol.append(x)
sol[0]+=1 #ajout de 1 au résultat. nombre d'or= (1+racine 5)/2
u=sol[0]
u=int(u/div)
phi.append(u)
rdiv=(u%div)
solution=solution*10**o+x
for t in range(h):
o,nb=len(sol),nb1
solution= solution*10
x=int(((nb*10**(2*o))-(solution**2))/(2*solution+1))
sol.append(x)
solution=solution+x
phir=int((rdiv*10+x)/div)
rdiv=(rdiv*10+x)%div
phi.append(phir)
print("phi=",phi)
sol.insert(1,',')
t1=time()-t2
print()
print(solution,"(manque la virgule)")
print("durée:",t1,"secondes")
#50000 décimales en 360.816890001297 secondes. 1876 lignes de chiffres
## phi =1,618 033 988 749 894 848 204 586 834 365 638 117 720 309
## 179 805 762 862 135 448 622 705 260 462 818 902 449 707 207 204 ...
#61 Café mathématique » Racinne carrée, extraction à la main. inédite? » 18-01-2023 14:26:05
- renéb
- Réponses : 6
Bons-jours,
Que ces derniers, tout attelé que j’étais à illustrer et partager ce qui m’est apparu comme une découverte.
"Qui trouve, cherche".
Il existe plusieurs méthodes d’extraction de racine carrée à la main.
J’ai le plaisir de vous en présenter une qui me semble inédite ; je la soumets à votre sagacité.
Je renvois à la rubrique « programmation » pour ce qui est du programme développé pour extraire une racine, chiffre par chiffre, suivant l’algorithme mis à l’épreuve (découverte pour moi en tous cas).
L’exemple choisi portera sur phi le nombre d’or. $\frac{1+\sqrt5}{2}$ oblige.
Extraire la racine de 5 et simultanément, de suite (sur le même chiffre) opérer sa division par 2 non sans avoir omis au préalable d’incrémenter d’une unité la valeur entière de la racine.
La découverte consiste à prendre en compte la différence entre un chiffre incrémenté d’ 1/10 élevé au carré et le carré de ce même chiffre avec... différence entre le nombre dont on calcule la racine et ...
Bon, rien ne vaut qu’un exemple.
Soit nb = 5
(partie entière)² < 5 = 2 racine de 5 : 2 ,
(2,1)² – 2 ²= 0,41
différence entre 5 et 2 ² = 1
1 / 0,41 = 2,439 => on retient 2 racine de 5 : 2 , 2,
(2 , 2 1)² – ( 2 , 2 ) ²= 0,0441
différence entre 5 et 2,2 ² = 0,16
0,16 / 0,0441 = 3,628 => on retient 3 racine de 5 : 2 , 2 , 3,
(2 , 2 3 1 )² – ( 2 , 2 3 ) ²= 0,004461
différence entre 5 et 2 , 2 3 ² = 0,0271
0,0271/ 0,004461 = 6,074 => on retient 6 racine de 5 : 2 , 2 , 3 , 6,
etc.
Simple d’ extraire, à coup sûr, chaque chiffre de la racine.
J’ai pu vérifier le résultat de phi sur 1000 décimales.
Avez-vous connaissance de cette façon de calculer à la main les racines carrées ?
J’aimerais que soit « théorisé » cette méthode eten apprendre d’avantage sur ses concepts.
A bientôt
RB







