-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathproblem34.ml
36 lines (33 loc) · 969 Bytes
/
problem34.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(*# P34 (**) Calculate Euler's totient function phi(m).
#
# Euler's so-called totient function phi(m) is defined as the number of positive
# integers r (1 <= r < m) that are coprime to m.
#
# Example: m = 10: r = 1,3,7,9; thus phi(m) = 4. Note the special case: phi(1) = 1.
#
# * (totient-phi 10)
# 4
#
# Find out what the value of phi(m) is if m is a prime number. Euler's totient
# function plays an important role in one of the most widely used public key
# cryptography methods (RSA). In this exercise you should use the most primitive
# method to calculate this function (there are smarter ways that we shall discuss
# later).*)
let rec gcd a b =
if ( b = 0 )
then a
else gcd b ( a mod b )
;;
let totient n =
let rec iterate i =
if ( i < 1 )
then 0
else
( if ( ( gcd i n ) = 1 ) then 1 else 0 ) +
( iterate ( i - 1 ) )
in
( iterate ( n - 1 ) )
;;
if ( ( totient 10 ) = 4 )
then ( Printf.printf "ok\n" )
else ( Printf.printf "failed\n" );;