Special divisors: Difference between revisions
Content added Content deleted
(add FreeBASIC) |
(Added solution for Action!) |
||
Line 4: | Line 4: | ||
Numbers '''n''' such that reverse('''d''') divides reverse('''n''') for all divisors '''d''' of '''n''', where '''n < 200''' |
Numbers '''n''' such that reverse('''d''') divides reverse('''n''') for all divisors '''d''' of '''n''', where '''n < 200''' |
||
<br><br> |
<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}}== |
=={{header|ALGOL 68}}== |