54 lines
1.2 KiB
Text
54 lines
1.2 KiB
Text
$lines
|
|
|
|
$constant true = 0FFFFH
|
|
$constant false = 0
|
|
|
|
rem - return true if n is square-free
|
|
function SquareFree(n = integer) = integer
|
|
var i, count, result = integer
|
|
i = 2
|
|
result = true
|
|
rem - decompose n into its prime factors
|
|
while (i*i) <= n and result <> false do
|
|
begin
|
|
count = 0
|
|
while n - (n / i) * i = 0 do
|
|
begin
|
|
count = count + 1
|
|
n = n / i
|
|
end
|
|
rem - not square-free if a divisor was repeated
|
|
if count > 1 then result = false
|
|
i = i + 1
|
|
end
|
|
end = result
|
|
|
|
rem - demonstrate the function
|
|
|
|
var i, found = integer
|
|
|
|
print "Showing square-free numbers between 1 and 145"
|
|
for i = 1 to 145
|
|
if SquareFree(i) then print using "### ";i;
|
|
next i
|
|
print
|
|
|
|
found = 0
|
|
for i = 1 to 100
|
|
if SquareFree(i) then found = found + 1
|
|
next i
|
|
print "Square-free numbers between 1 and 100 ="; found
|
|
|
|
found = 0
|
|
for i = 1 to 1000
|
|
if SquareFree(i) then found = found + 1
|
|
next i
|
|
print "Square-free numbers between 1 and 1,000 ="; found
|
|
|
|
found = 0
|
|
for i = 1 to 10000
|
|
if SquareFree(i) then found = found + 1
|
|
next i
|
|
print "Square-free numbers between 1 and 10,000 ="; found
|
|
|
|
end
|