π
<-

Fonction isPrime

:32tins: :32tinsktpb: :32tinsktpn: :32tinscas: :32tinstpkc: :32tinstpktpb: :32tinstp: :32tinscastp: :32tinscmc: :32tinscx: :32tinscxcas:

Fonction isPrime

Message non lude pierrotdu18 » 04 Jan 2014, 20:54

Bonjour à tous,

Déjà, je voulais savoir, y a t-il un moyen de connaître le code des fonctions déjà présentes dans la calculatrice?
Ensuite, je voudrais me pencher sur la fonction isPrime.
Récemment, j'essaye de trouver plein de façons différentes en TI-basic de tester la primarité d'un nombre... Toutes celles que j'ai déjà essayé sont beaucoup beaucoup plus lentes que la fonction native de la calculatrice...
Est-ce qu'ils ont trouvé un algorithme révolutionnaire? Si oui quel est celui utilisé, et sinon, peut être que ce n'est pas le même langage? Les fonctions natives seraient donc codées en ASM ou en C/C++ ?

Merci à vous!
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Fonction isPrime

Message non lude Lionel Debroux » 04 Jan 2014, 21:23

Est-ce qu'ils ont trouvé un algorithme révolutionnaire?

Non. Pas mal d'algorithmes pour ceci ont été trouvés par les mathématiciens et les informaticiens au fil du temps. Il y a des algorithmes déterministes, des algorithmes probabilistes, chacun ayant sa zone d'utilisabilité (les algorithmes naïfs deviennent vite très lents quand la taille augmente). Wikipedia, et des sites/forums plus spécialisés, seront des ressources plus complètes et plus pédagogiques :)
Notons que déterminer la primalité, et factoriser un composé, sont deux choses très différentes. La première est beaucoup plus facile que la deuxième, surtout avec une détermination probabiliste de primalité. On connaît un algorithme polynômial de détermination de primalité (AKS), même s'il est rarement utilisé; la factorisation est une autre paire de manches (NP-complet, au mieux), rapidement pénible pour des particuliers (factoriser RSA-512 est trivial, mais factoriser RSA-640 l'est déjà nettement moins pour des particuliers; l'état de l'art est à 768 bits, sachant que 896 ou même 1024 est probablement en cours).

Si oui quel est celui utilisé, et sinon, peut être que ce n'est pas le même langage?

Seul TI pourrait indiquer sans trop d'effort quels algorithmes sont utilisés par le CAS de la Nspire. Même si on sait comment s'y prendre pour trouver en gros les blocs de code qui s'occupent du test de primalité (trouver primary_tag_list et descendre - c'est exactement pareil que sur TI-68k, les structures de données au coeur du CAS de la Nspire restent très similaire à celles utilisées par le CAS des premières TI-92 de 1995-1996), il faudrait reconnaître les algorithmes à partir du désassemblage, ce qui peut être désagréable.
J'avais lu une fois que les TI-68k utilisaient un algorithme déterministe au début, puis probabiliste pour des nombres plus grands, mais je serais bien en peine de retrouver la référence, si tant est qu'elle existe encore (l'endroit où je pense l'avoir lu ayant été partiellement détruit par un cracker).

Les fonctions natives seraient donc codées en ASM ou en C/C++ ?

Bien entendu - toutes les fonctions natives du BASIC sont codées en C (sur TI-68k, c'est clairement du C, parce que même un programmeur ASM relativement incompétent ne produirait jamais certaines conneries que le compilo de merde utilisé par TI a commis - et puis de toute façon, développer en ASM pur prend beaucoup trop de temps et coûte donc beaucoup trop cher) :)
Et puis le BASIC est implémenté de façon lente, ce qui n'aide pas à l'implémentation d'algorithmes de test de primalité...
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.4%
 
Messages: 6873
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Fonction isPrime

Message non lude pierrotdu18 » 04 Jan 2014, 21:26

D'accord merci...
Et donc actuellement, quel est l'algorithme le plus rapide en TI-Basic pour tester la primarité d'un nombre? :)
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Fonction isPrime

Message non lude Laurae » 05 Jan 2014, 02:31

pierrotdu18 a écrit:D'accord merci...
Et donc actuellement, quel est l'algorithme le plus rapide en TI-Basic pour tester la primarité d'un nombre? :)


Essaies l'algorithme de Sieve of Atkin :) pas sûr que ce soit le plus rapide mais c'est déjà pas trop mal.
Avatar de l’utilisateur
LauraeAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 78.8%
 
Messages: 1685
Images: 22
Inscription: 25 Juin 2010, 00:00
Localisation: France, La Défense
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Professeur, Etudiant, Formateur

Re: Fonction isPrime

Message non lude pierrotdu18 » 05 Jan 2014, 09:22

Ok... Et donc l'algorithme qui consiste à incrementer de deux et tester la divisibilité jusqu'àla racine du nombre, faut oublier ?
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Fonction isPrime

Message non lude Levak » 05 Jan 2014, 09:23

pierrotdu18 a écrit:Ok... Et donc l'algorithme qui consiste à incrementer de deux et tester la divisibilité jusqu'àla racine du nombre, faut oublier ?

Pourquoi ? Tu as mieux ?
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: Fonction isPrime

Message non lude pierrotdu18 » 05 Jan 2014, 09:28

Ah, c'est que c'est ça le truc de Sieve of Atkin ?
Je n'ai pas été me renseigner, mais si c'est ça alors j'ai rien dit ;-)
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Fonction isPrime

Message non lude Laurae » 05 Jan 2014, 12:29

pierrotdu18 a écrit:Ah, c'est que c'est ça le truc de Sieve of Atkin ?
Je n'ai pas été me renseigner, mais si c'est ça alors j'ai rien dit ;-)


Bien plus différent.

http://en.wikipedia.org/wiki/Sieve_of_Atkin

Pseudocode selon Wikipedia :

Code: Tout sélectionner
// arbitrary search limit
limit ← 1000000         

// initialize the sieve
for i in [5, limit]: is_prime(i) ← false

// put in candidate primes:
// integers which have an odd number of
// representations by certain quadratic forms
for (x, y) in [1, √limit] × [1, √limit]:
    n ← 4x²+y²
    if (n ≤ limit) and (n mod 12 = 1 or n mod 12 = 5):
        is_prime(n) ← ¬is_prime(n)
    n ← 3x²+y²
    if (n ≤ limit) and (n mod 12 = 7):
        is_prime(n) ← ¬is_prime(n)
    n ← 3x²-y²
    if (x > y) and (n ≤ limit) and (n mod 12 = 11):
        is_prime(n) ← ¬is_prime(n)
 
// eliminate composites by sieving
for n in [5, √limit]:
    if is_prime(n):
        // n is prime, omit multiples of its square; this is
        // sufficient because composites which managed to get
        // on the list cannot be square-free
        for k in {n², 2n², 3n², ..., limit}:
            is_prime(k) ← false

print 2, 3
for n in [5, limit]:
    if is_prime(n): print n
Avatar de l’utilisateur
LauraeAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 78.8%
 
Messages: 1685
Images: 22
Inscription: 25 Juin 2010, 00:00
Localisation: France, La Défense
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Professeur, Etudiant, Formateur

Re: Fonction isPrime

Message non lude Bisam » 05 Jan 2014, 14:43

Le crible d'Atkin est une version améliorée du crible d'Ératosthène.
Son but n'est pas de tester si un nombre donné est premier ou non, mais de renvoyer la liste de tous les nombres premiers inférieurs ou égaux à une limite donnée.

On peut éventuellement s'en servir pour déterminer ensuite si un nombre est premier ou non... mais ce ne sera efficace que si on doit le faire un grand nombre de fois.

Il ne répond donc pas vraiment à la question posée par pierrotdu18.

Pour ce qui est des autres algorithmes de tests de primalité, la quasi-totalité nécessitent de solides connaissances mathématiques post-bac pour être compris et parfois encore plus pour être implémentés !
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Fonction isPrime

Message non lude Laurae » 05 Jan 2014, 14:59

t'as plein de choses ici compréhensibles : http://en.wikipedia.org/wiki/Primality_test
Avatar de l’utilisateur
LauraeAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 78.8%
 
Messages: 1685
Images: 22
Inscription: 25 Juin 2010, 00:00
Localisation: France, La Défense
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Professeur, Etudiant, Formateur

Suivante

Retourner vers Problèmes divers / Aide débutants

Qui est en ligne

Utilisateurs parcourant ce forum: ClaudeBot [spider] et 7 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2640 utilisateurs:
>2616 invités
>17 membres
>7 robots
Record simultané (sur 6 mois):
29271 utilisateurs (le 11/07/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)