Page 1 of 1

Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 18 Oct 2010, 22:46
by Rukia
Bonsoir,
Je suis comme vous l'avez sans doute deviné, une nouvelle dans le monde des calculatrices programmable, en effet je viens de faire l'acquisition d'une Ti83+ fr et depuis quelques heures, j'essaie désespérément de crée un programme capable de calculer la puissance modulaire mais sans résultat.

Je n'ai pas honte de dire que la programmation et moi ça fait 1000, mais ce dont j'ai vraiment honte c'est que le prof nous a clairement donner le code mais je ne sais pas comment le mettre dans la calculatrice. :#oups#:

Veuillez pardonner d'avance la noob que je suis. :#zen#:

(_J'ai un partiel Mercredi et je ne sais pas comment m'en sortir sans ce programme, d'après le prof c'est indispensable.

Voilà ce que le prof nous a donné:

Code python
def pm(a,x,n):
A,X,Y=a%n,x,1
while X!=0:
if X%2= =1 : Y=(Y*A)%n
A,X=(A*A)%n,X//2
return Y

Je ne sais pas vous mais moi j'y comprends rien.

Sinon voilà une autre méthode en dehors de python

Fonction pm(a,x,n € N, n≠0)→N
X←x ; Y←1 ; A←a mod n ;
Tant que X≠0 faire
Si X mod 2 = 1 alors Y←Y * A mod n ;
A←(A*A) mod n ; X←X div 2
Fin tant que
Résultat Y


Merci d’avance.

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 18 Oct 2010, 23:36
by critor
Python:
Code: Select all
def pm(a,x,n):
A,X,Y=a%n,x,1
while X!=0:
if X%2= =1 : Y=(Y*A)%n
A,X=(A*A)%n,X//2
return Y


Algorithme:
Code: Select all
Fonction pm(a,x,n € N, n≠0)→N
X←x ; Y←1 ; A←a mod n ;
Tant que X≠0 faire
Si X mod 2 = 1 alors Y←Y * A mod n ;
A←(A*A) mod n ; X←X div 2
Fin tant que
Résultat Y



Bonsoir.


Je ne connais pas le Python, et l'algorithme que l'on t'a fourni ne me semble pas utiliser une écriture très standard. Il ressemble plus à une traduction française de Python qu'autre chose...

Mais je vais essayer de t'aider de mon mieux.

Voici un premier jet en TI-Basic.
Code: Select all
PROGRAM:PM
Prompt A,X,N
1→Y
round(NfPart(A/N),0→A
While X≠0
If 1=2fPart(X/2
Yround(NfPart(A/N),0→Y
round(NfPart(AA/N),0→A
int(X/2←X
End
Y


Crée donc un nouveau programme PM:
ImageImageImageImageImageImage

Et voici même comment taper le code TI-Basic.
Merci de "comprendre" et corriger d'éventuelles étourderies.

Prompt A,X,N
ImageImageImageImageImageImageImageImageImageImageImageImage

1→Y
ImageImageImageImageImage

round(NfPart(A/N),0→A
ImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImage

While X≠0
ImageImageImageImageImageImageImageImage

If 1=2fPart(X/2
ImageImageImageImageImageImageImageImageImageImageImageImageImage

Yround(NfPart(A/N),0→Y
ImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImage

round(NfPart(AA/N),0→A
ImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImage

int(X/2←X
ImageImageImageImageImageImageImageImageImage

End
ImageImageImage

Y
ImageImage


Voilà!
Tu quittes l'éditeur, et tu le lances!
ImageImageImage


A bientôt sur TI-Bank.

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 00:23
by Rukia
Bonsoir ou bonjour vu l'heure (>_Tout d'abord je te dis un GRAND MERCI pour la réponse super rapide et surtout quelle présentation! Je suis restée scotcher, ça a dû te prendre beaucoup de temps de faire tout ça, vraiment merci beaucoup.

Cependant j'ai un petit problème, en effet lorsque je lance le programme j'ai une ERR:SYNTAXE

Désolée de te déranger encore une fois et merci d'avance pour ta réponse.

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 01:21
by critor
Rukia wrote:Bonsoir ou bonjour vu l'heure (_Tout d'abord je te dis un GRAND MERCI pour la réponse super rapide et surtout quelle présentation! Je suis restée scotcher, ça a dû te prendre beaucoup de temps de faire tout ça, vraiment merci beaucoup.

Cependant j'ai un petit problème, en effet lorsque je lance le programme j'ai une ERR:SYNTAXE

Désolée de te déranger encore une fois et merci d'avance pour ta réponse.


Bonsoir.


Ce n'est pas grave.

Quand tu as l'erreur de syntaxe, choisis l'option "Goto" et la calculatrice va te montrer quelle ligne du programme provoque l'erreur.

Compare-la alors avec ce que je t'ai donné ci-dessus.
Cela peut être un simple espace en trop en fin de ligne, par exemple...

Normalement, ça marche sur ma calculatrice, mais j'ai pu "mal" recopier les choses.

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 06:36
by Lionel Debroux
Comme celui des TI-68k, et pour les mêmes raisons (vérification de la signature de l'OS), l'OS des TI-Z80 flashables (dont fait partie la 83+ FR) doit contenir quelque part, des fonctions de puissance modulaire.
C'est plus difficile d'y accéder en ASM que de refaire l'algo en BASIC, mais les fonctions de l'OS seraient plus efficaces et pourraient traiter de plus grands nombres.

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 19:18
by Rukia
critor2000 wrote:Bonsoir.


Ce n'est pas grave.

Quand tu as l'erreur de syntaxe, choisis l'option "Goto" et la calculatrice va te montrer quelle ligne du programme provoque l'erreur.

Compare-la alors avec ce que je t'ai donné ci-dessus.
Cela peut être un simple espace en trop en fin de ligne, par exemple...

Normalement, ça marche sur ma calculatrice, mais j'ai pu "mal" recopier les choses.


Bonjour,
J'ai fait ce que tu m'as dit et il me renvoie vers la dernière ligne, je pense que c'est l'espace mais lorsque je l'efface et que je teste, le programme ne renvoie pas de résultat, il affiche "fait" c'est tout.
Que dois-je faire?

Comme celui des TI-68k, et pour les mêmes raisons (vérification de la signature de l'OS), l'OS des TI-Z80 flashables (dont fait partie la 83+ FR) doit contenir quelque part, des fonctions de puissance modulaire.
C'est plus difficile d'y accéder en ASM que de refaire l'algo en BASIC, mais les fonctions de l'OS seraient plus efficaces et pourraient traiter de plus grands nombres.

J'ai cherché mais il n'y a rien. T'as des indications peut être?

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 19:33
by critor
Ben oui! J'ai fait une bêtise.

critor2000 wrote:End
ImageImageImage

Y
ImageImage



La dernière ligne, il faut y écrire Y et non espace.
Me suis trompé de touche.

Mais tu aurais pu corriger, puisque je t'ai aussi fourni le code :;):

Bref, donc:


Y
ImageImage

Re: Fonction de puissance modulaire, possible? Impossible?

Unread postPosted: 19 Oct 2010, 19:40
by Lionel Debroux
Comme celui des TI-68k, et pour les mêmes raisons (vérification de la signature de l'OS), l'OS des TI-Z80 flashables (dont fait partie la 83+ FR) doit contenir quelque part, des fonctions de puissance modulaire.
C'est plus difficile d'y accéder en ASM que de refaire l'algo en BASIC, mais les fonctions de l'OS seraient plus efficaces et pourraient traiter de plus grands nombres.

J'ai cherché mais il n'y a rien. T'as des indications peut être?

Non, je ne sais pas programmer les TI-Z80 en ASM :(:
Rien d'évident dans des docs comme http://group.revsoft.org/ti83plus.inc et http://brandonw.net/calcstuff/BCALLs.txt... les fonctions ne sont peut-être même pas dans l'OS lui-même mais dans le boot code.
Bref, pour aller plus loin dans cette voie, si c'est nécessaire, il faut un vrai programmeur TI-Z80 ASM :):