-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprimes.per
71 lines (66 loc) · 2.04 KB
/
primes.per
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
(for documentation of the number, read README.md and syntax.md)
@000 gi (input a number to adress 000)
@005 g=000 (copy from address 000 to 005, so that we can use 005 as a loop index variable)
/ |2| (need to check only half of the numbers - sqrt operation is not yet supported)
@001 = |2| (start a loop from 2 for the divisor)
{
@002 g=000
g/001 (integer division can be used to our advantage)
g*001 (integer-dividing and multiplying by a number is a check of divisibility)
(if the product and original number are equal, then divisible, otherwise not)
@003 g=000
g-002 (find the value of original number minus the product, stored in 003)
{
@003 g/003 (if 003 is 0, skip it otherwise divide it by itself)
(what this does is set 003 to 1 if not divisible and 0 if divisible)
@100 (set the pointer to 100. since all addresses are initialized to 0, this immediately ends the loop)
} (this is a way to implement if's)
@007 = |1|
g-003 (set 007 to 1 and subtract 003 from it, i.e. invert 003)
{ (now, 007 is 1 if divisible and 0 if non divisible)
@004 + |1| (if 007 is 1, i.e. if divisible, increment it)
@100
}
@001 + |1| (increment divisor)
@005 - |1| (decrement the number by 1)
(now, since pointer is pointing to 005, when this value becomes 0, loop will stop)
} (this has the effect that the number is checked for divisibility from 2 to number/2, and 004 is non zero if any factors were found)
@004
{
g/004
@100
} (this loop has the effect that if 004 is non zero, it is made 1, otherwise 0.)
@008 = |1|
g-004 (intvert 004 and store it in 008)
@009 = 'p'
@010 = 'r'
@011 = 'i'
@012 = 'm'
@013 = 'e'
@014 = 'n'
@015 = 'o'
@016 = 't'
@017 = ' '
(the following outputs the appropriate message - prime or not prime.)
@008
{
@009 pc
@010 pc
@011 pc
@012 pc
@013 pc
@100
}
@004
{
@014 pc
@015 pc
@016 pc
@017 pc
@009 pc
@010 pc
@011 pc
@012 pc
@013 pc
@100
}