aboutsummaryrefslogtreecommitdiff
path: root/challenge-198/deadmarshal/modula-3/ch2/src/Ch2.m3
blob: baa3ae32889884e3915bf342dbb336457c52e49e (plain)
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
MODULE Ch2 EXPORTS Main;

IMPORT IO;

PROCEDURE IsPrime(N:INTEGER):BOOLEAN =
  VAR I:INTEGER;
  BEGIN
    I := 5;
    IF (N = 2) OR (N = 3) THEN RETURN TRUE END;
    IF (N <= 1) OR (N MOD 2 = 0) OR (N MOD 3 = 0) THEN RETURN FALSE END;
    WHILE I * I <= N DO
      IF (N MOD I = 0) OR (N MOD (I+2) = 0) THEN RETURN FALSE END;
      INC(I,6);
    END;
    RETURN TRUE;
  END IsPrime;

PROCEDURE PrimeCount(N:INTEGER):INTEGER =
  VAR Count:INTEGER;
  BEGIN
    Count := 0;
    FOR I := 1 TO N-1 DO
      IF IsPrime(I) THEN INC(Count) END;
    END;
    RETURN Count;
  END PrimeCount;
  
BEGIN
  IO.PutInt(PrimeCount(10)); IO.Put("\n");
  IO.PutInt(PrimeCount(15)); IO.Put("\n");
  IO.PutInt(PrimeCount(1)); IO.Put("\n");
  IO.PutInt(PrimeCount(25)); IO.Put("\n");
END Ch2.