Tâches du manuel scolaire I

Partie I
Partie II
Partie III

Considérons la solution algorithmique au problème numéro 38 du livre "Tâches pour les enfants de 5 à 15 ans"

Calculez le montant:

 f r a c 1 1 c d o t 2  + f r a c 1 2 c d o t 3 + f r a c 1 3 c d o t 4 + . . . + F r a c 1 99 c d o t 100      


(avec une erreur ne dépassant pas 1% de la réponse)

Voici un algorithme pour calculer les sommes partielles de cette série dans Scheme (Lisp) dans drRacket (drRacket vous permet d'effectuer des calculs en fractions ordinaires):

#lang racket (define series_sum ( lambda (n) (if (= n 0) 0 (+ (/ 1 (* n (+ n 1))) (series_sum(- n 1))) ) ) ) (series_sum 10) (series_sum 100) (series_sum 1000) (series_sum 10000) (series_sum 100000) (series_sum 1000000) (define series_sum_1 ( lambda (n) (if (= n 0) 0 (+ (/ 1.0 (* n (+ n 1.0))) (series_sum_1(- n 1.0))) ) ) ) (series_sum_1 10) (series_sum_1 100) (series_sum_1 1000) (series_sum_1 10000) (series_sum_1 100000) (series_sum_1 1000000) 


Les deux derniers exemples drRacket calculés avec une erreur



Ce programme peut être exécuté sur ide ideone.com et codepad.org en ligne .

Le même algorithme en Python
 def series_sum(n): if n==0: return 0 else: return 1.0/(n*(n+1.0))+series_sum(n-1.0) print(series_sum(10)) print(series_sum(100)) 

Lien vers ideone.com


Si nous considérons des sommes partielles dans des fractions ordinaires, nous pouvons voir que la somme de la série est

 f r a c n n + 1



Permettez-moi de vous rappeler que  lim fracnn+1= frac11+ frac1n= frac11=1 à n to infty

Le deuxième volume du cours de calcul différentiel et intégral 363 (4) examine le cas général

 sum frac1( alpha+n)( alpha+n+1)= frac1 alpha+1



La tâche du cours "Mathématiques pour les développeurs":
Trouver le nombre de membres dans une séquence  frac2n14n+5 allongé en dehors de l'intervalle (1 frac11000;1+ frac11000)



Passons au sujet principal de l'article.


Prenons un exemple de plus d'un livre de problèmes.
43 . Nombre de lapins (Fibonacci), forment une séquence (a1=1),1,3,5,8,13,21,34,..., dans lequel an+2=an+1+an pour tout le monde n=1,2,... . Trouvez le plus grand diviseur commun des nombres a100 et a99 .

Réponse: Deux nombres de Fibonacci adjacents sont des nombres premiers, c'est-à-dire  gcd(un+1,un)=1
(Le pgcd est le plus grand commun diviseur, c'est-à-dire GCD).

«Preuve du livre« Au-delà des pages d'un manuel de mathématiques »[10-11]
Cap de spoiler
De l'égalité u n + 2 = u n + 1 + u n il s'ensuit que  g c d ( u n + 2 , u n + 1 ) = g c d ( u n + 1 , u n )  . En reculant de cette façon, nous arrivons à  gcd(u2,u1)= gcd(1,1)=1 , et donc deux nombres de Fibonacci adjacents sont des nombres premiers.

Preuve que  gcd(un+2,un+1)= gcd(un+1,un) le livre n'est pas donné, mais selon l'algorithme euclidien
 gcd(un+2,un+1)= gcd(un+1,r)
r - reste de la division un+2 sur un+1

et depuis pour les numéros de Fibonacci r=un
alors
 gcd(un+2,un+1)= gcd(un+1,un)


Dans la tâche suivante, vous devez calculer le nombre d' or ,  frac sqrt5+12 environ1618 . [Il s'agit du rapport d'aspect d'une carte postale qui reste similaire lors de la découpe d'un carré dont le côté est le plus petit côté de la carte postale.]

53 . Pour une séquence de nombres de Fibonacci an tâches 43 trouver la limite de la relation  fracan+1an tout en s'efforçant n à l'infini:

 fracan+1an=2, frac32, frac53, frac85, frac138, frac2113, frac3421.



Considérons les segments représentant les différences de deux membres adjacents de la série  fracan+1an .

Même les membres de la série  fracan+1an représentent une séquence croissante xn

 frac32, frac85, frac2113,...,



Membres de rang impair  fracan+1an représentent une séquence décroissante yn

2, frac53, frac138,...,



Par le lemme d'intervalle intégré (Cours de calcul différentiel et intégral, 38)

c= limxn= limyn


Pour notre ligne à un moment donné c égalité équitable  fracan+2an+1= fracan+1an

Diviser an+2=an+1+an sur an+1 nous obtenons l'équation  fracan+2an+1=1+ fracanan+1 .
En remplaçant  fracan+2an+1=x, fracanan+1= frac1x nous obtenons l' équation quadratique x=1+ frac1x .

Si dans le programme geogebra nous connectons les points 2 et  frac32 ,  frac32 et  frac53 ,  frac53 et  frac85 etc. - obtenir un chiffre auto-similaire

Pour comparaison




En général, il existe un algorithme standard pour calculer les nombres de Fibonacci en Python.
Cet algorithme est disponible sur Python.org
 def fib(n): a, b = 0, 1 while a < n: print(a) a, b = b, a+b fib(100) 

Vous pouvez vérifier le lien
Modifiez cet algorithme pour qu'il imprime une approximation du nombre d'or. Pour deux nombres adjacents a et b, nous diviserons la somme a + b par b
 def fib(n): a, b = 0.0 , 1.0 while a < n: print((a+b)/b) a, b = b, a+b fib(100) 

Vous pouvez vérifier le lien

Voici quelques tâches du tutoriel SICP concernant le nombre d'or.
Les tâches
Exercice 1.13.
Démontrer que Fib (n) est l'entier le plus proche de  varphin/ sqrt5 varphi=(1+ sqrt5)/2 .

Exercice 1.35.
Montrez que le nombre d'or  varphi (section 1.2.2) est un point fixe de transformation x à1+1/x et utiliser ce fait pour calculer  varphi en utilisant la procédure à virgule fixe.

Exercice 1.37.
... Définir la procédure cont-frac de sorte que le calcul (cont-frac ndk) donne la valeur k - fraction continue finie élémentaire. Testez votre procédure en calculant des approximations à 1 / φ avec
 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) k) 

pour les valeurs séquentielles k .


L'exemple suivant du livre de tâches "Tâches pour les enfants de 5 à 15 ans"
54 . Calculer la fraction continue infinie

1+ frac12+ frac11+ frac12+ frac11+ frac12+...



UPD Considérez l'équation

 alpha=1+ frac12+ frac1 alpha


Selon les théorèmes 236 et 235 du livre «Number Theory»:

 alpha= fracP1 alpha+P0Q1 alpha+Q0


Nous composons un tableau de valeurs Pn et Qn à n=0,1:

12
P13
Q12


pour que  alpha= frac3 alpha+12 alpha+1,2 alpha22 alpha1=0

et depuis  alpha>0, alors

 alpha= frac1+ sqrt32


Considérez le problème du livre «Derrière les pages d'un manuel de mathématiques» [10-11]
4 . Afficher ce numéro  sqrt1+ sqrt1+ sqrt1+... égal au nombre  varphi définir le nombre d'or.

Considérez l' option xn= sqrtc+ sqrtc+...+ sqrtc
Cours de calcul différentiel et intégral, 35 (2)
De cette façon xn+1 obtenu de xn selon la formule

xn+1= sqrtc+xn


... Par le théorème principal, les options xn a une limite finie a . Pour le déterminer, on passe à la limite de l'égalité

x2n+1=c+xn;


Nous obtenons de telle manière que a satisfait l'équation quadratique

a2=c+a


Cette équation a les racines de différents signes; mais la limite qui nous intéresse a ne peut pas être négatif, par conséquent, il est exactement égal à la racine positive:

a= frac sqrt4c+1+12



D'où nous pouvons conclure que le "nombre d'or" est une solution à l'équation a2=c+a
à c=1 .


De plus, dans le cours du calcul différentiel et intégral, 35 (3), un algorithme pour calculer le nombre inverse est considéré
Soit c Est un nombre positif et mettez xn=cyn . La relation de récursivité écrite ci-dessus sera remplacée par:

yn+1=yn(2cyn)


Prendre la valeur initiale y0 sous la condition: 0<y0< frac1c nous obtenons cela yn augmente de façon monotone, aura tendance à  frac1c . Selon ce schéma, sur les machines à compter, le nombre inverse est calculé c .


Algorithme de calcul des nombres inverses c en Python:
( Ideone.com et codepad.org )
 def reciprocal(c,y0,n): arr=[] for i in range(n): arr.append(y0) y0=y0*(2-c*y0) return arr 

La fonction réciproque prend un nombre en entrée c valeur initiale y0 , nombre d'itérations n et renvoie un tableau "d'approximations" au nombre  frac1c .
y0=0,1 à c<10
y0=0,01 à 10 $ <c <100 $
y0=0,001 à 100 $ <c <1000 $
etc.
Exemples de fonctionnement de la fonction réciproque avec divers c

 >>> reciprocal(3,0.1,10) 

[0,1, 0,17, 0,2533, 0,31411733000000003, 0,3322255689810133, 0,3333296519077525,
0.3333333332926746, 0.3333333333333333337, 0.3333333333333333337, 0.3333333333333333337]

 >>> reciprocal(8,0.1,10) 

[0,1, 0,12, 0,1248, 0,12499968, 0,1249999999991808, 0,125, 0,125, 0,125, 0,125, 0,125]

 >>> reciprocal(5,0.1,10) 

[0,1, 0,15000000000000002, 0,18750000000000003, 0,19921875000000003, 0,19999694824218753, 0,1999999999534339, 0,20000000000000004, 0,1999999999999999998,
0,1999999999999999998, 0,1999999999999999998]

Interprétation géométrique


Essayons d'utiliser la méthode tangente pour approximer le nombre inverse.
Tangentes y=f(x0)(xx0)+f(x0) graphique de fonction y= frac1x sont exprimés par la formule y= frac2x0 fracxx20

Substitution de nombres 1,2,3,4 $, ... $ au lieu de x0 on obtient les équations des tangentes

y=2x


y=1 fracx4


y= frac23 fracx9


y= frac12 fracx16


Construisez ces graphiques


Si vous déplacez l'hyperbole vers le bas pour  alpha , puis il traverse l'axe des abscisses au point  frac1 alpha .
L'équation tangente est convertie en y= frac2x0 fracxx20 alpha
En outre, l'équation de l'équation de la tangente à zéro et l'expression x nous obtenons l'équation x=x0 fracf(x0)f(x0)

Au lieu de cela f(x0) remplaçant  frac1x0 alpha
Au lieu de cela f(x0) remplaçant  frac1x20

Nous obtenons l'expression x=x0+( frac1x0 alpha)x20
En élargissant les supports, nous obtenons x=x0+x0 alphax20

Remplaçant 0,1 $ dans l'équation x=x0(2 alphax0) et voir quelles valeurs vont "traverser" x à  alpha=2 nous obtenons 0,1 $, 0,18, 0,29, 0,42, 0,49, 0,5 $

Substitution de ces valeurs dans l'équation y= frac2x0 fracxx202 nous devenons directs

y=0,111 fracx0,897


y=0,222 fracx0,81


y=0,816 fracx0,504


y=0,857 fracx0,49


y=1,5 fracx0,326


y=2 fracx0,25





Extraction de racine carrée


Revenant aux expressions irrationnelles, nous considérons une méthode itérative d'extraction de la racine carrée.
Nous allons écrire un algorithme en utilisant la méthode itérative Heron

xn+1= frac12(xn+ fracaxn)


 def square_root(a,n): # a -  , n -   x0=1 #    1 arr=[] for i in range(n): arr.append(x0) #      x0=0.5*(x0+a/x0) #      return arr print square_root(2,10) 

codepad.org

Calcul de la racine carrée à l'aide des fractions continues utilisées par Rafael Bombelli

Pour trouver la valeur  sqrtn , on définit d'abord toute son approximation:  sqrtn=a pmr0 $ <r <1 $ . Alors n=(a pmr)2=a2 pm2ar+r2 . De là, il est facile de déduire que r= frac|na2|2a pmr . Remplacement de l'expression résultante dans la formule  sqrtn=a pmr , nous obtenons une expansion continue des fractions:

a pm frac|na2|2a pm frac|na2|2a pm frac|na2|2a pm cdots




Ainsi, nous pouvons écrire l'algorithme d'extraction de racine carrée en utilisant la décomposition en une fraction continue
 def square_root(n,a,n_count): # n- , a -    x0=a #    a arr=[] for i in range(n_count): #       a arr.append(x0-a) #  a x0=2*a+(na*a)/x0 return arr print square_root(2.0,1.0,10) 

codepad.org

En général, les nombres réels et complexes, ainsi que les fonctions d'une ou plusieurs variables, peuvent être des numérateurs et des dénominateurs privés.
La méthode d'extraction de la partie entière permet de représenter un nombre irrationnel sous la forme d'une fraction continue infinie avec des unités dans les numérateurs (numérateurs fréquents égaux à l'unité).
Voici un exemple d'une expansion fractionnelle continue d'un nombre  sqrt5 extrait du livre "Algèbre"

 sqrt52= frac( sqrt52)( sqrt5+2) sqrt5+2= frac1 sqrt5+2



De cette façon  sqrt5=2+ frac1 sqrt5+2

Sélectionnez la partie entière du nombre  sqrt5+2:E( sqrt5+2)=4 . Moyens  sqrt5+2 peut être représenté comme 4 $ + \ alpha $ . Il est clair que  alpha= sqrt5+24= sqrt52 donc  sqrt5+2=4+ sqrt5+2 . Encore une fois, nous détruisons l'irrationalité dans le numérateur du deuxième terme:

 sqrt52= frac1 sqrt5+2


Le résultat est:

 sqrt5=2+ frac14+ frac1 sqrt5+2


Faisons une autre étape similaire:

 sqrt5=2+ frac14+ frac14+ frac1 sqrt5+2


Il est facile de voir que le processus d'isolement de la partie entière et la formation d'une fraction continue dans cet exemple n'a pas de fin. Dans chaque nouveau dénominateur apparaîtra 4 et terme  sqrt52 . Il est donc clair que  sqrt5 est représentée comme une fraction continue infinie:

 sqrt5=[2,4,4,4,...]




Hypothèse


Si d in mathbbN, sqrtd notin mathbbN puis la fraction continue du nombre  sqrtd+[ sqrtd] purement périodique.
Evarist Galois a prouvé cette hypothèse.

C'est-à-dire si à la partie non périodique de la fraction [1;2,2,2,...]= sqrt2 ajouter toute la partie [ sqrt2]=1 alors nous obtenons une fraction purement périodique [2,2,2, ...] $ .

 sqrt3=[1;1,2,...];
 sqrt3+1=[2,1,...]

 sqrt5=[2;4,4,4,...];
 sqrt5+2=[4,4,4,...]

 sqrt6=[2;2,4,...];
 sqrt6+2=[4,2,...]

 sqrt13=[3;1,1,1,1,6,...];
 sqrt13+3=[6,1,1,1,1,1,...]

Cloud Computing WolframAlpfa
WolframAlpfa calcule les fractions continues en utilisant l'opération de fraction continue
Calculez la valeur  sqrt3
le lien
Calculez la valeur  sqrt3+1
le lien

Si dans la décomposition racine selon la méthode Bombelli

\ sqrt {n} = a \ pm {\ frac {| na ^ {2} |} {2a \ pm {\ frac {| na ^ {2} |} {2a \ pm {\ frac {| na ^ { 2} |} {2a \ pm \ cdots}}}}}}} $


ajouter au premier terme a , on obtient une fraction purement périodique

\ sqrt {n} + a = 2a \ pm {\ frac {| na ^ {2} |} {2a \ pm {\ frac {| na ^ {2} |} {2a \ pm {\ frac {| na ^ {2} |} {2a \ pm \ cdots}}}}}}}



Il reste à amener la fraction à une forme plus familière (avec des unités au numérateur).
Divisez le numérateur et le dénominateur de la fraction par |na2| nous obtenons l'expression

\ sqrt {n} + a = 2 a \ pm {\ frac {1} {\ frac {2a} {| na ^ {2} |} \ pm {\ frac {1} {2a \ pm {\ frac { 1} {\ frac {2a} {| na ^ {2} |} \ pm \ cdots}}}}}}}


De cette façon

 sqrt2+1=2+ frac1 frac21+ frac12+ frac1 frac21+...=[2,2,2,...]


 sqrt3+1=2+ frac1 frac22+ frac12+ frac1 frac22+...=[2,1,...]


 sqrt5+2=4+ frac1 frac41+ frac14+ frac1 frac41+...=[4,4,4,...]


 sqrt6+2=4+ frac1 frac42+ frac14+ frac1 frac42+...=[4,2,...]


 sqrt13+3=6+ frac1 frac64+ frac16+ frac1 frac64+...=[6, frac32,...]


Nous allons écrire un programme qui calcule l'approximation de la fraction continue [6, frac32,...]
 #lang racket (define continued_fraction ( lambda (n) (if (= n 0) 1 (+ 6 (/ 1 (+ 3/2 (/ 1 (continued_fraction(- n 1)))))) ))) (continued_fraction 4) 

codepad.org
Dans la quatrième étape, nous obtenons 6 $ \ frac {3818} {6305} $ ce qui est égal 6,60555114 $ tout  sqrt13+3 environ6,60555127 .




PS Résoudre le problème («Problèmes pour les enfants de 5 à 15 ans»)
27 . Prouver que le reste de la division d'un nombre 2p1 premier impair
p est égal à 1
(exemples: 22=3a+1,24=5b+1,26=7c+1,2101=1023=10 cdot93) .
Ce problème est examiné dans l'article Amazing Adventures of Continued Fractions du magazine Quantum.

Livres:
"Tâches pour les enfants de 5 à 15 ans" V. I. Arnold.
«Le cours du calcul différentiel et intégral» G. M. Fichtenholtz
"Théorie des nombres" A. A. Buchstab
«Derrière les pages d'un manuel de mathématiques» N. Ya. Vilenkin, L. P. Shibasov, Z. F. Shibasova
«Algèbre» N. Ya. Vilenkin, R. S. Guter, S. I. Schwarzburd
Arithmétique numérique Ercegovac Milos D., Lang Tomas
«La structure et l'interprétation des programmes informatiques» Harold Abelson, Gerald Sassman

Voir aussi
L'article "Sur une tâche qui n'est plus proposée lors de l'entretien".
Le blog de Spice IT Recruitment publie des tâches d'entrevue dans diverses entreprises.
Tâches pour les interviews dans Yandex.
Dans cette vidéo, A. Savvateev résout des problèmes avec des interviews chez Tesla.

Source: https://habr.com/ru/post/fr419237/


All Articles