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}}==
Anonymous user