2017-09-14 4 views
0

J'ai besoin d'écrire une fonction dans la raquette #lang qui détermine la quantité de diviseurs d'un entier positif. (Ex: 6 a 4; 1,2,3,6 diviseurs)Trouver la quantité de diviseurs

Jusqu'à présent, j'ai:

(define (ab divise) (si (= 0 (modulo ab)) #t # f))

je besoin d'utiliser cette fonction d'assistance pour écrire la fonction (diviseurs-jusqu'à nk) qui qui calcule le nombre de diviseurs n est compris entre 1 et k (il calcule le nombre de diviseurs de n jusqu'à la valeur k).

+2

Il faut noter que if est redondant. Le corps de la fonction doit simplement être '(= 0 (modulo a b))'. Aussi, quelle est votre question? Savez-vous comment utiliser les boucles? – Carcigenicate

+0

Pour ma classe, j'ai besoin d'écrire une fonction dans la raquette qui détermine combien de diviseurs un nombre a. (6 a 4; 1, 2, 3, 4) (20 a 6: 1, 2, 4, 5, 10, 20) ect. Comment faire une fonction qui peut faire cela? – Anthony

+0

Oui, j'ai compris. Je veux dire ce que vous demandez spécifiquement ici? Vos questions sont trop larges en ce moment. De quoi avez-vous besoin d'aide exactement? – Carcigenicate

Répondre

1

C'est plus facile fait avec une boucle for, en particulier for/fold, étant donné que vous avez déjà votre fonction divides.

(define (divisors num) 
    (for/fold ([acc 0] 
      [n (in-range num)]) 
    (if (divides n num) <acc+1> <acc>))) 

Fondamentalement, vous êtes bouclez la liste, et en gardant un accumulateur, et chaque fois qu'un nombre est divisible, incrémenter votre accumulateur. Voyez si vous pouvez remplir les expressions pour <acc+1> et <acc> dans le code ci-dessus.

Vous pouvez aussi le faire avec la liste length et filter. Voyez si vous pouvez comprendre comment.