- 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
[Mini-Challenge Basic #6] : Nombres parfaits
Re: [Mini-Challenge Basic #6] : Nombres parfaits
Voilà ma participation
Bonjour
-
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 975
- Inscription: 07 Nov 2013, 20:18
- Localisation: Paris V
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: MP* Lycée Henri IV
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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
isperfect(10^6) = false en 6 sec. 63
isperfect(2*10^6) = false en 12 sec. 94
-
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)- Messages: 409
- Images: 9
- Inscription: 14 Oct 2012, 23:30
- Localisation: Paris 19
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: PSI*
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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 )
Edit : avec le check de parité en plus dès le début, pour la vitesse
(Algo standard, cf. RosettaCode )
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...)-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Messages: 14606
- Images: 1216
- Inscription: 01 Juin 2007, 00:00
- Localisation: France
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Twitter/X: adriweb
- GitHub: adriweb
-
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 975
- Inscription: 07 Nov 2013, 20:18
- Localisation: Paris V
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: MP* Lycée Henri IV
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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
-
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)- Messages: 409
- Images: 9
- Inscription: 14 Oct 2012, 23:30
- Localisation: Paris 19
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: PSI*
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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!
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!
-
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)- Messages: 409
- Images: 9
- Inscription: 14 Oct 2012, 23:30
- Localisation: Paris 19
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: PSI*
-
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 975
- Inscription: 07 Nov 2013, 20:18
- Localisation: Paris V
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: MP* Lycée Henri IV
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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.
Ensuite, le code de la fonction en elle-même :
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
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 5665
- Inscription: 11 Mar 2008, 00:00
- Localisation: Lyon
- Genre:
- Calculatrice(s):→ MyCalcs profile
Re: [Mini-Challenge Basic #6] : Nombres parfaits
Bisam, pourquoi pour le intsqrt(), tu n'appliques juste pas la fonction
EDIT: Oups je me suis trompé de fonction mais bon tu vois bien celle dont je veux parler
$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
-
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 975
- Inscription: 07 Nov 2013, 20:18
- Localisation: Paris V
- Genre:
- Calculatrice(s):→ MyCalcs profile
- Classe: MP* Lycée Henri IV
Re: [Mini-Challenge Basic #6] : Nombres parfaits
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 !
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 !
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Messages: 5665
- Inscription: 11 Mar 2008, 00:00
- Localisation: Lyon
- Genre:
- Calculatrice(s):→ MyCalcs profile
31 messages
• Page 3 sur 4 • 1, 2, 3, 4
Retourner vers Mini-Challenges
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité