π
<-
Chat plein-écran
[^]

[Mini-Challenge Basic #6] : Nombres parfaits

Sous-forums réunissant les mini-challenges en TI-Basic Nspire

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude pierrotdu18 » 06 Juil 2014, 21:39

Voilà ma participation :)

Code: Tout sélectionner
Define isPerfect(n)=
Func
Local r,k,t
r:=0
t:=n-2
For k,1,t
  If mod(n,k)=0
    r:=r+k
EndFor
Return r=n
EndFunc
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: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude davidElmaleh » 06 Juil 2014, 21:51

Pour avoir un aperçu pour la dernière participation de pierrotdu18 :
isperfect(10^6) = false en 6 sec. 63
isperfect(2*10^6) = false en 12 sec. 94
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude Adriweb » 06 Juil 2014, 21:58

Et pour info, si je n'étais pas parti sur un truc court, j'aurais fais en gros la même chose que ce que pierrot vient de proposer :)
(Algo standard, cf. RosettaCode :D)

Edit : avec le check de parité en plus dès le début, pour la vitesse
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude pierrotdu18 » 06 Juil 2014, 21:58

Je suis flatté ;)
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: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude davidElmaleh » 06 Juil 2014, 22:01

Mon code est dans le même esprit que celui de pierrotdu18 :
  • variable de somme
  • boucle for dans laquelle on recherche et on somme les diviseurs de n
  • sortie et vérification
Mais il est implémenté (petite astuce : comment rechercher les diviseurs d'un nombre? ;))
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude davidElmaleh » 06 Juil 2014, 22:26

Nouvelles statistiques :
pour ma part, j'arrive à :
isperfect(10^20) = false en 2 secondes
isperfect(10^25) = false en 5 secondes 30
isperfect(2658455991569831744654692615953842176) = true en moins 30 ms!
Image
Avatar de l’utilisateur
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 19.6%
 
Messages: 409
Images: 9
Inscription: 14 Oct 2012, 23:30
Localisation: Paris 19
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: PSI*

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude pierrotdu18 » 06 Juil 2014, 22:36

Bah écoute, propose nous ta réponse :)
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: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude Bisam » 06 Juil 2014, 23:14

Bon, voici ma mouture...
Pour éviter les désagréments de non simplification des "floor(sqrt(n))" lorsque n est trop grand, je me suis fait ma propre fonction qui calcule la racine carrée entière d'un nombre.
Code: Tout sélectionner
Define Libpub intsqrt(n)=
Local q,r,l,i,j,k,u,res
q := n
l := {}
While q>0
  l := augment({mod(q,100)},l)
  q := intDiv(q,100)
EndWhile
k := dim(l)
j := 1
r := 0
res := 0
For i,1,k
  r := 100*r + l[i]
  u := 0
  While r≥j
    r := r-j
    j := j+2
    u := u+1
  EndWhile
  j := 10*j - 9
  res := 10*res + u
EndFor
EndFunc


Ensuite, le code de la fonction en elle-même :
Code: Tout sélectionner
Define isperfect(n)=
Func
Local i,k,p,r,res
p := 2n
k := 2
While mod(n,2)=0
  n := shift(n)
  k := 2k
EndWhile
res := k-1
r := intsqrt(n)+1
i := 3
While i < r
  k := 1
  While mod(n,i)=0
    n := n/i
    k := i*k+1
  EndWhile
  If k > 1 Then
    res := res * k
    r := intsqrt(n) + 1
  EndIf
  i := i+2
EndWhile
If n > 1
  res := res*(n + 1)
Return(res=p)
EndFunc
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude pierrotdu18 » 07 Juil 2014, 11:08

Bisam, pourquoi pour le intsqrt(), tu n'appliques juste pas la fonction
$mathjax$\dfrac12\left(x+\dfrac2x\right)$mathjax$
4 ou 5 fois pour le ceiler après?... :)

EDIT: Oups je me suis trompé de fonction mais bon tu vois bien celle dont je veux parler ;)
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: [Mini-Challenge Basic #6] : Nombres parfaits

Message non lude Bisam » 07 Juil 2014, 12:07

Essaie... tu verras que c'est en fait (en moyenne, et pour des nombres suffisamment grands) beaucoup plus lent d'utiliser l'algorithme de Héron que tu cites (bien qu'il converge très rapidement).
En effet, le facteur limitant est cette fois-ci la division de réels.
En plus, il y a toujours les problèmes d'approximation qui font qu'on n'obtient pas forcément le bon résultat !
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

PrécédenteSuivante

Retourner vers Mini-Challenges

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
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.
2490 utilisateurs:
>2478 invités
>7 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
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)