img
@_ö
(11:48)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 34 inconnu(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « Précédent - 2/2 - » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (41r) » Euler #12
./29 - REPRISE AUTOMATIQUE DU MESSAGE PRECEDENT
10.06.2001 - 35353
02:59  damnvoid - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Sasume (./25) :
Oui mais là je ne calcule qu’une seule fois la racine carrée, avant la boucle et j’utilise la valeur dans le test de boucle.

J'espere que ton compilateur sait optimiser ca tout seul quand meme!


I'm on a boat motherfucker, don't you ever forget
./Publicité AdSense
./30
10.06.2001 - 32554
04:20  Kevin Kofler - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Ce n'est pas si évident que ça, sqrt est une fonction, le compilateur ne sait pas forcément qu'elle est "pure" (sans effets de bord).


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./31
28.08.2003 - 8284
16:39  Sasume - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Au fait, est-ce qu’on n’a pas divisors(n(n+1)) = 2 * divisors(n(n+1)/2) + 1 ?


« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
./32
18.06.2001 - 20210
18:35  Folco - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Kevin Kofler (./30) :
Ce n'est pas si évident que ça, sqrt est une fonction, le compilateur ne sait pas forcément qu'elle est "pure" (sans effets de bord).

Même s'il sait que c'est ue fonction qu'il peut traiter en une instruction ?


./33
27.04.2006 - 30199
18:45  Zerosquare - Posté : 26-03-2010  @_ö   Signaler un abus Signaler un contenu inapproprié

Ben je ne pense pas que le compilo "réfléchisse" jusque là.


Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
./34
15.06.2003 - 6780
19:52  GoldenCrystal - Posté : 26-03-2010  @_ö   Signaler un abus Signaler un contenu inapproprié

./32 & ./33 > Sisi, mais pas avec tous les paramètres de compilation. Peut-être pas avec tous les compilateurs non plus, mais bon nombre de fonctions sont sujettes à un traitement spécial. Par exemple GCC peut aller vérifier (compile-time donc) la chaîne de format que tu files à printf, et les fonctions sur les nombres à virgule flottante peuvent être optimisées en instructions natives sur le CPU. (Evidemment ça ne peut pas marcher avec tous les CPU, ni tous les modèles de CPU, donc c'est optionnel)
(Et ce sont des fonctions bien définies (runtime c) donc connues à l'avance… Pas des fonctions utilisateurs où le compilateur a besoin du code source pour optimiser (e.g. fonctions inline))


Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes
./35
18.06.2001 - 20210
21:15  Folco - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Il s'agit donc d'une optimisation peephole pour mieux tirer parti d'un processeur qui en est capable, c'est ça ? A moins que ce type d'optimisation désigne une optimisation toujours applicable pour un motif de code donné ?


./36
16.06.2003 - 25853
21:20  Sally - Posté : 26-03-2010  F   Signaler un abus Signaler un contenu inapproprié

Sasume (./31) :
Au fait, est-ce qu’on n’a pas divisors(n(n+1)) = 2 * divisors(n(n+1)/2) + 1 ?
Euh... divisors(1×2) = 2 est différent de 2×divisors(1×2/2)+1 qui vaut 3
divisors(2×3) = 4 est différent de 2×divisors(2×3/2)+1 qui vaut 5
etc.
donc je me demande d'où t'est venue l'idée de poser cette question ?

En fait ta formule n'est vérifiée dans absolument aucun cas (en effet le nombre de diviseurs d'un nombre n'est impair que s'il s'agit d'un carré parfait, ce qui n'est jamais le cas de n(n+1). Enfin sauf si n = 0 mais là le nombre de diviseurs est infini)

Edité par Sally le 26-03-2010 à 21:37:58.

« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Forum Cultures du mondeforum littéraire
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#
./37
28.08.2003 - 8284
21:33  Sasume - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Soit k = n(n+1)/2.
Je me suis dit que les diviseurs de 2×k contiendraient 2 et toutes les combinaisons de 2 avec les autres diviseurs, soit autant que de diviseurs de k.

Mais c’est vrai que j’aurais quand même pu tester avec quelques cas avant de proposer l’idée #roll#


« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
./38
28.08.2003 - 8284
21:44  Sasume - Posté : 26-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Sinon, pour info il y a une solution encore plus rapide que celle avancée par Kevin (tu me déçois… :o ).

Considérons la suite 1 1 3 2 5 3 7 …
Elle est constitué des entiers naturels où les nombres pairs sont divisés par 2.

En prenant le produit de deux termes successifs de cette suite on obtient un terme de la série n(n+1)/2. Les deux termes de notre suite sont premiers entre eux donc pour obtenir les diviseurs de leur produit il suffit de multiplier leur nombre de diviseurs à chacun entre eux.

Pas besoin de trouver de m, comme dans la solution de Kevin !


« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
./39
16.06.2003 - 25853
21:54  Sally - Posté : 26-03-2010  F   Signaler un abus Signaler un contenu inapproprié

Sasume (./37) :
Je me suis dit que les diviseurs de 2×k contiendraient 2 et toutes les combinaisons de 2 avec les autres diviseurs, soit autant que de diviseurs de k.
Alors déjà ça ne pourrait marcher que si k est impair, sinon tu recomptes plein de diviseurs du produit qui étaient déjà des diviseurs de k. Ensuite, même dans ce cas il ne faut pas oublier que l'un des diviseurs de k est le nombre 1. Par conséquent « toutes les combinaisons de 2 avec les autres diviseurs » ça contient entre autres le nombre 2×1, donc tu ne dois pas recompter 2 comme un diviseur de plus.

Mais sinon c'est l'idée de la formule que Kevin a donnée en ./21 ; simplement comme il faut obligatoirement un nombre impair¹ il décompose d'abord ton nombre k sous la forme une puissance de 2 fois un nombre impair. Ensuite seulement tu peux raisonner sur la relation entre divisors(k) et divisors(2k).

¹plus généralement, pour pouvoir compter séparément les diviseurs de deux facteurs de ton nombre et multiplier ces nombres pour avoir le total des combinaisons, il faut que ces deux facteurs soient premiers entre eux, c'est-à-dire que leur seul diviseur commun soit 1 (comme ça tu es sûr que rien n'est compté deux fois). Ce que Kevin a exprimé en disant que leur pgcd (Plus Grand Commun Diviseur) doit être égal à 1 : si 1 est le plus grand, c'est que c'est le seul.


« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Forum Cultures du mondeforum littéraire
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#
./40
10.06.2001 - 32554
01:53  Kevin Kofler - Posté : 27-03-2010  M   Signaler un abus Signaler un contenu inapproprié

Sasume (./31) :
Au fait, est-ce qu’on n’a pas divisors(n(n+1)) = 2 * divisors(n(n+1)/2) + 1 ?

Non.
divisors(4*5)=divisors(20)=|{1,2,4,5,10,20}|=6 qui est pair et ne peut pas être égal à 2 divisors(10)+1.


Mes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
./41
16.06.2003 - 25853
01:55  Sally - Posté : 27-03-2010  F   Signaler un abus Signaler un contenu inapproprié

Tiens sinon le problème posé a un rapport avec ça : http://fr.wikipedia.org/wiki/Nombre_hautement_composé
En regardant la liste des premiers nombres, on comprent pourquoi on divise les jours en 24 heures de 60 minutes et les angles en 360 degrés (et on comprend aussi l'avantage de ceci #tripo# )

Kevin > ./36 ? %)


« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Forum Cultures du mondeforum littéraire
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#
./Publicité AdSense
 « Précédent - 2/2 - » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Algorithmie et optimisation (41r) » Euler #12

./Poster un nouveau message. - Ouvrir dans une nouvelle fenêtre
Login : Mot de passe :

url - image - media  
spoiler - pre - fixed
quote - box - hr
poll - code





Smileys
Smileys perso
Pièce jointe
     Flood control (?) :    
Les messages postés sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus.

» yN ©1624 - Aide / Charte / Crédits
101ms | Statistiques