Anonymous user
Special divisors: Difference between revisions
Added solution for Action!
(add FreeBASIC) |
(Added solution for Action!) |
||
Line 4:
Numbers '''n''' such that reverse('''d''') divides reverse('''n''') for all divisors '''d''' of '''n''', where '''n < 200'''
<br><br>
=={{header|Action!}}==
<lang Action!>PROC CalcDivisors(INT x INT ARRAY div INT POINTER count)
INT i
count^=0
FOR i=1 TO x/2
DO
IF x MOD i=0 THEN
div(count^)=i
count^==+1
FI
OD
RETURN
INT FUNC Reverse(INT x)
INT res
res=0
WHILE x#0
DO
res==*10
res==+x MOD 10
x==/10
OD
RETURN (res)
BYTE FUNC IsSpecial(INT x)
INT ARRAY divisors(100)
INT count,i,rev,revd
CalcDivisors(x,divisors,@count)
rev=Reverse(x)
FOR i=0 TO count-1
DO
revd=Reverse(divisors(i))
IF rev MOD revd#0 THEN
RETURN (0)
FI
OD
RETURN (1)
PROC Main()
INT i
FOR i=1 TO 199
DO
IF IsSpecial(i) THEN
PrintI(i) Put(32)
FI
OD
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Special_Divisors.png Screenshot from Atari 8-bit computer]
<pre>
1 2 3 4 5 6 7 8 9 11 13 17 19 22 23 26 27 29 31 33 37 39 41 43 44 46 47 53 55
59 61 62 66 67 69 71 73 77 79 82 83 86 88 89 93 97 99 101 103 107 109 113 121
127 131 137 139 143 149 151 157 163 167 169 173 179 181 187 191 193 197 199
</pre>
=={{header|ALGOL 68}}==
|