Carré ou pas ?
dans Arithmétique
Comment savoir si un nombre, trop grand pour être factorisable, est un carré ?
Réponses
-
Tu calcules sa racine carrée entière (integer square root) ?Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Méthode de Newton discrétisée. Etant donné $a \in \N$, détermination de l'entier $x$ vérifiant $x^2 \le a < (x+1)^2$ via la suite :
$$
a_{n+1} = \left\lfloor {a_n + \lfloor a / a_n \rfloor \over 2} \right\rfloor \quad
\text{ où } a_0 \text{ est choisi correctement. On attend que } a_n \le a_{n+1} \text{. Cf un vieux truc attaché}
$$
Animation (je reconnais que ce n'est pas aussi joli que tes dessins). Un premier petit exemple : la fonction $F$ est l'itérateur de Newton[color=#000000] > a := 101 ; > F := func < x | (x + a div x) div 2 > ; > x := a ; count := 0 ; > while true do while> y := F(x) ; while> if y ge x then break ; end if ; while> x := y ; count := count + 1 ; while> end while ; > > x ; 10 > count ; 4 [/color]
Un autre exemple moins petit : l'entier $a$ possède 290 chiffres décimaux[color=#000000] > a := NextPrime(10^70) * NextPrime(10^100) * NextPrime(10^120) ; > Ilog(10, a) ; 290 > F := func < x | (x + a div x) div 2 > ; > x := a ; count := 0 ; > time while true do time|while> y := F(x) ; time|while> if y ge x then break ; end if ; time|while> x := y ; count := count + 1 ; time|while> end while ; Time: 0.010 > > count ; 490 > x^2 le a and a lt (x+1)^2 ; true [/color]
-
L'algorithme (à la potence, par tranche de deux chiffres) de calcul de racine carrée d'un nombre de taille (nombre de chiffres) $\tau$ est polynomial en $\tau$, en $O(\tau^2)$ je dirais. Tout à fait raisonnable, donc.
-
Voici ce que prône Henri Cohen pour tester si un entier $n$ est un carré et calculer la racine carrée de $n$ :
- tester si $n\pmod{64}$ est un carré : si non, $n$ n'est pas un carré ; si oui, continuer ;
- calculer $n\pmod{45045}$ pour les calculs suivants ;
- tester si $n\pmod{63}$ est un carré : si non, $n$ n'est pas un carré ; si oui, continuer ;
- tester si $n\pmod{65}$ est un carré : si non, $n$ n'est pas un carré ; si oui, continuer ;
- tester si $n\pmod{11}$ est un carré : si non, $n$ n'est pas un carré ; si oui, continuer ;
- calculer la racine carrée entière – Cohen donne la même méthode que Claude et voir si c'est bien la racine carrée.
-
Merci pour vos réponses rapides.
Newton est une méthode du deuxième ordre.
Je suppose qu'on peut suivre l'évolution de l'erreur
$r_n-\sqrt{a}$ et attendre qu'elle soit assez petite. -
A-t-on besoin de divisions ? Etant donné $b^2 \le a$ trouver un $c$ de taille raisonnable (disons $c \ge \frac{\lfloor \sqrt{a}\rfloor - b}{4}$)
tel que $b^2+2bc+c^2 \le a$ ne doit pas être difficile à partir du nombre de bits de $b$ et $a-b^2$ -
Hello,
Dans ma vieille note, je dis qu'il faut choisir $a_0$ tel que $a_0^2 \ge a$, avec $a_0$ le plus petit possible. Je ne me souviens plus comment on peut le faire intelligemment (sans utiliser la racine carrée entière évidemment). Dans mon premier post, j'ai pris $a_0 = a$. Là, je recommence (avec la même donnée) en trichant un tantinet pour partir d'un $a_0$ moindre, noté $x$ ci-dessous.[color=#000000] > a := NextPrime(10^70) * NextPrime(10^100) * NextPrime(10^120) ; > F := func < x | (x + a div x) div 2 > ; > x := 2^((Ilog(2,a) + 1) div 2) ; // CQ, gros tricheur > x^2 ge a ; true > count := 0 ; > time while true do time|while> y := F(x) ; time|while> if y ge x then break ; end if ; time|while> x := y ; count := count + 1 ; time|while> end while ; Time: 0.000 > count ; 8 > x^2 le a and a lt (x+1)^2 ; true [/color]
C'est juste pour montrer la sensibilité par rapport au point de départ $a_0$. -
$N> 0$ est un carré si et seulement si $N-1=a(a+2)$ pour un certain entier $a$.
En effet,
Si $N=b^2$, $b$ entier naturel, alors $N-1=b^2-1=(b-1)(b+1)$ et on prend $a=b-1$ -
L'algorithme "à la potence" en découpant en paquets de deux chiffres ne se débrouille pas mal. En Sage :
def racent(n) : L=n.digits(100) a=0 r=0 while L != [] : p=L.pop() r=100*r+p t=0 while (20*a+t+1)*(t+1)<=r : t+=1 r=r-(20*a+t)*t a=10*a+t if r==0 : print n,"est un carré et sa racine carrée est", a else : print n,"n'est pas un carré et la partie entière de sa racine carrée est",a
Un essai avec un non carré :n = next_prime(10^70) * next_prime(10^100) * next_prime(10^120) %time racent(n)
100000000000000000000000000000000000000000000000000000000000000000000330000000000000000000000000002670000000000000000007900000000000000000000000000000000000000000000008811000000000000000026070000000000000000000000000210930000000000000000000000000000000000000000000000000000000000000000696069 n'est pas un carré et la partie entière de sa racine carrée est 10000000000000000000000000000000000000000000000000000000000000000000016500000000000000000000000000133500000000000000000394999999999999999986387500 CPU times: user 1.31 ms, sys: 0 ns, total: 1.31 ms Wall time: 874 µs
et un essai avec un carré :n=next_prime(ZZ(17*range(10),10))^2*next_prime(ZZ(17*range(9),10))^2 %time racent(n)
7494740442802098708819262955323943219619028627667319904288348303186392067854111534452995987780416681434232973286043022374187866927619733001745655425367439406561176034422328567272389892769129178705810126398012626836920021207613178837196440179239864631186420667989001390663755734664384556071466536746583687349340421049741559489948004401797128440910758881241500049653188958640585308462313669045151357371867591139748440718423428004845596674709260244183750979745992199529695986351801821057064556456851795087241809447022148069663249203782599597568992218174010791546084133203382168990054595919749654136755494699793265419164314346341699613517052129670249 est un carré et sa racine carrée est 86572168985200426875063252664049535242948163500838026326627012609205911237463801100289590086572168985200426875063252664049535242948163500838026326627069905349798090535253301356812486926085405483012697338705426524274699442831626734687319463872888736791445664083301356812486926085405483012697338705426524274699442831626915693 CPU times: user 4.23 ms, sys: 11 µs, total: 4.24 ms Wall time: 3.22 ms
-
En base $b=10$
Etant donné $a = \lfloor n^{1/2} \rfloor$ et $m \in [0,b^2-1]$ alors $\lfloor (b^2 n+m)^{1/2} \rfloor = ab + t$ où $t \in [0,b-1]$ que tu trouves juste en essayant $t=0,1,\ldots$ jusqu'à que $(ab+t+1)^2 > b^2n+m$ -
L'examen des derniers chiffres à droite du nombre peut aussi servir de test rapide pour exclure la possibilité d'avoir affaire à un carré.
-
Je signale également, en ce Mercredi 8 Mai 2019, un critère qu'il est pas mal : un nombre entier $N$ est un carré si et seulement si il existe un nombre entier $c$ tel que $N^2 - 4 = (c-2)(c + 2)$. POUF-POUF (suite à GBZM) Bien sûr, je voulais dire $N - 4 = (c-2)(c+ 2)$
-
claude quitté écrivait:
> Je signale également, en ce Mercredi 8 Mai 2019 un critère qu'il est pas mal : un nombre entier
> $N$ est un carré si et seulement si il existe un nombre entier $c$ tel que $N^2 - 4 = (c-2)(c +
2)$.
Par exemple, $17$ est un carré parce que $17^2-4=(17-2)(17+2)$.
L'humour demande un peu plus de soin, Claude. ;-) -
@GBZM : vu (et corrigé). Et si ce n'était pas de l'humour ?
-
Petite question annexe sur la fin des carrés :
2729² = 744 7441.
Trouver les autres carrés qui se terminent par 7441.
A la main, bien entendu. -
Bonjour à tous
Une réponse à la question de nodgim:
$a(:=7441)$ est premier avec $10$ et la congruence $x^2=a$ modulo $10^4$ a une solution $x_1 (:=2729)$.
Elle a donc exactement huit solutions: elle équivaut au système ( $x^2=a$ modulo $2^4$ ET $x^2=a$ modulo $5^4$), la première congruence ayant exactement quatre solutions et la seconde deux.
$x_1$ étant solution, quatre des huit solutions sont $ \pm x_1, \pm (x_1+5000)$.
Une cinquième $(:=x_5)$ s'obtient en résolvant $(x_1+ \epsilon 1250)^2=a$ modulo $10^4$, soit $\epsilon x_1+625=0$ modulo $4$, ou encore, vu que $625=1$ modulo $4$ et que $x_1:=2729=1$ modulo $4$, $\epsilon=-1$ et donc $x_5=x_1-1250$.
Les quatre autres solutions sont donc $ \pm x_5, \pm (x_5+5000)$.
Cordialement
Paul -
Dépasse, c'est tout à fait ça.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 8 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 53 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres