Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

carré parfait et algorithme

Posté par
flight
03-09-22 à 15:47

Bonjour

je vous propose l'exercice suivant  :

Ecrire un algorithme dans le language de votre choix permetant de determiner le premier carré parfait  inferieur ou égal à un entier n  choisit dans N .

Posté par
Ulmiere
re : carré parfait et algorithme 03-09-22 à 15:51

Le premier ou le plus grand ?
Parce que le premier, c'est 0 pour tout n

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:33

bonjour Ulmiere   , partant de n je cherche le carré parfait imediatement inferieur ou egal à n

Posté par
ty59847
re : carré parfait et algorithme 03-09-22 à 16:35

On a droit à quelles fonctions standard ?
Si les fonctions racine () et int()  sont autorisées, c'est trop facile :

def f(x) :
  a=int(sqrt(x))
  return a*a

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:36

question supplementaire .... existe t il une facon de le faire mathematiquement ?

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:38

ty59847 viens d'y répondre à la vitesse de la lumière  ...:Dbon ...

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:40

grace à ce resultat je vous prepare le prochain exercice  

Posté par
Ulmiere
re : carré parfait et algorithme 03-09-22 à 16:43

 Cliquez pour afficher

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:44

Bravo à tous  !!

Posté par
ty59847
re : carré parfait et algorithme 03-09-22 à 16:49

Si on interdit les 2 fonctions partie-entières et racines carrée, ou une de ces 2 fonctions, le challenge devient beaucoup plus intéressant.
- Exercice 1 : on interdit la fonction racine carrée.
On a droit uniquement aux 4 opérations courantes, et à la fonction partie entière.

Posté par
flight
re : carré parfait et algorithme 03-09-22 à 16:57

...tu veux dire challange mathematique ou programation ?

Posté par
jarod128
re : carré parfait et algorithme 03-09-22 à 17:23

@ty59847 via la méthode de Héron pour remplacer la racine?

Posté par
Ulmiere
re : carré parfait et algorithme 03-09-22 à 17:24

Suffit de calculer la racine par Newton-Raphson et ensuite de prendre la partie entière

Posté par
ty59847
re : carré parfait et algorithme 03-09-22 à 22:44

Le Héron, je m'attendais à le voir apparaître.
Mais ce Newton-Raphson, je ne connais pas du tout.

Oui, ce n'est pas le challenge du siècle, mais c'est un peu plus difficile que la question initiale.

Posté par
jarod128
re : carré parfait et algorithme 03-09-22 à 23:04

Le problème pour Héron et Newton-Raphson, c'est le coté itératif à faire un certain nombre de fois. Du coup, utilisation de for ou while mais alors le problème initial est trivial.

Posté par
Ulmiere
re : carré parfait et algorithme 03-09-22 à 23:13

Newton-Raphson est un algorithme simple pour trouver un zéro d'une fonction de R->R.

Tu prends un point initial x(0)
Et par récurrence tu définis x(n+1) = x(n) - f(x(n))/f'(x(n))

Si tu choisis correctement x(0) ça converge quadratiquement vers un zéro de f.

Ici pour f on prendrait f(x) = x^2-n et comme valeur initiale x(0) = n.

Comme je le disais ça converge très vite, donc avec 100 itérations (ce qui prend moins d'un quart de seconde) on sera très proche de sqrt(n).
Vu qu'on veut la partie entière c'est de toute façon pas très grave si on pas immensément proche. A +0.5 près  à suffit.

Posté par
dpi
re : carré parfait et algorithme 04-09-22 à 08:30

Bonjour,
J'étais sur l'autre...
Ici il semble évident     │n │²

Posté par
dpi
re : carré parfait et algorithme 04-09-22 à 08:32

Du moins pour l'inférieur ...

Posté par
royannais
re : carré parfait et algorithme 04-09-22 à 08:33

Bonjour
Pourquoi pas avec excel !

 Cliquez pour afficher

Posté par
dpi
re : carré parfait et algorithme 04-09-22 à 08:38

Pour compléter

si    n- │n│<0.5 │n│²  sinon  (│n│+1)²

Posté par
LittleFox
re : carré parfait et algorithme 04-09-22 à 10:22

Et la version Newton-Raphson avec juste des entiers (division entière) marche très bien pour la racine carrée.

Même plus besoin de passer par des float (nombres à virgules)

Posté par
dpi
re : carré parfait et algorithme 04-09-22 à 11:37

Comme  flight demande une réponse quel que soit l'algo..

carré parfait et algorithme

Posté par
Ulmiere
re : carré parfait et algorithme 04-09-22 à 13:11

LittleFox @ 04-09-2022 à 10:22

Et la version Newton-Raphson avec juste des entiers (division entière) marche très bien pour la racine carrée.

Même plus besoin de passer par des float (nombres à virgules)


Effectivement ça va bien fonctionner mais je pense que ça mettra plus de temps à converger par rapport aux floats. Et les divisions entières utilisant rarement des instructions SIMD, les calculs eux-mêmes seront plus longs.
L'avantage des divisions entières, c'est qu'on ne se prend pas la tête avec des erreurs d'arrondi et des divisions euclidiennes.

Voici un petit code qui illustre cela.
Les valeurs hardcodées dans les for ont été éudiées pour ce N en particulier, mais je suppute que les floats restent plus rapides pour des N plus grands.

Ici je suis resté sur Newton-Raphson, mais peut être que la méthode de la sécante, bien que d'ordre inférieur(phi), sera plus rapide ici. Parce que ((x_i^2-a) - (x_{i-1}^2-a))/(x_i-x_{i-1}) n'est rien d'autre que x_i+x_{i-1}. Ca donnerait u0,u = u, (u*u0+a)/(u+u0) où u0 a la même valeur initiale que u...


 Cliquez pour afficher

Posté par
LittleFox
re : carré parfait et algorithme 05-09-22 à 22:50


Avec des divisions entières on a la même convergence qu'avec des floats.

Pour les SIMD, la division entière est la division par défaut pour deux entiers la plupart du temps.

A noter que python a déjà la méthode toute faite pour nous:

Je suis étonné que tu aies besoin de 77 itérations, mais tu pars de n ce qui n'est pas une bonne approximation de la racine du tout.
En utilisant n >> (n.bit_length()>>1), j'obtiens la réponse en seulement 5 itérations pour le m que tu as utilisé.

def isqrt(n: int):
    x = n >> (n.bit_length() >> 1)
    while not (x * x <= n < (x + 1) * (x + 1)):
        x = (x + n // x) >> 1
    return x


24 = 5²-1 est le plus petit nombre tel que 2 itérations sont nécessaires
483 = 22²-1 est le plus petit nombre tel que 3 itérations sont nécessaires
506943 = 712²-1 est le plus petit nombre tel que 4 itérations sont nécessaires
Il n'y a pas de nombres en dessous de 100 000 000 qui nécessite plus de 4 itérations.

Posté par
dpi
re : carré parfait et algorithme 06-09-22 à 09:14

Mon bidule permet d'avoir le carré le plus proche,inférieur égal ou (supérieur) pour n ,la question ne portait que sur inférieur ou égal



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !