π
<-

[Mini-Challenge Basic #6] : Nombres parfaits

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

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

Unread postby pierrotdu18 » 06 Jul 2014, 21:39

Voilà ma participation :)

Code: Select all
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
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

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

Unread postby davidElmaleh » 06 Jul 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
User avatar
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 19.6%
 
Posts: 409
Images: 9
Joined: 14 Oct 2012, 23:30
Location: Paris 19
Gender: Male
Calculator(s):
MyCalcs profile
Class: PSI*

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

Unread postby Adriweb » 06 Jul 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

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...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 82.1%
 
Posts: 14880
Images: 1211
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

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

Unread postby pierrotdu18 » 06 Jul 2014, 21:58

Je suis flatté ;)
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

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

Unread postby davidElmaleh » 06 Jul 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
User avatar
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 19.6%
 
Posts: 409
Images: 9
Joined: 14 Oct 2012, 23:30
Location: Paris 19
Gender: Male
Calculator(s):
MyCalcs profile
Class: PSI*

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

Unread postby davidElmaleh » 06 Jul 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
User avatar
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 19.6%
 
Posts: 409
Images: 9
Joined: 14 Oct 2012, 23:30
Location: Paris 19
Gender: Male
Calculator(s):
MyCalcs profile
Class: PSI*

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

Unread postby pierrotdu18 » 06 Jul 2014, 22:36

Bah écoute, propose nous ta réponse :)
Bonjour
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

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

Unread postby Bisam » 06 Jul 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: Select all
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: Select all
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
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

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

Unread postby pierrotdu18 » 07 Jul 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
User avatar
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 40.5%
 
Posts: 975
Joined: 07 Nov 2013, 20:18
Location: Paris V
Gender: Male
Calculator(s):
MyCalcs profile
Class: MP* Lycée Henri IV

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

Unread postby Bisam » 07 Jul 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 !
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

PreviousNext

Return to Mini-Challenges

Who is online

Users browsing this forum: ClaudeBot [spider] and 2 guests

-
Search
-
Social TI-Planet
-
Featured topics
Ndless for CX 4.5.5 / CX II 6.2.0
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 !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
6525 utilisateurs:
>6501 invités
>18 membres
>6 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)