44 lines
1.5 KiB
Text
44 lines
1.5 KiB
Text
print time$()
|
|
|
|
for power =1 to 6
|
|
perimeterLimit =10^power
|
|
upperBound =int( 1 +perimeterLimit^0.5)
|
|
primitives =0
|
|
triples =0
|
|
extras =0 ' will count the in-range multiples of any primitive
|
|
|
|
for m =2 to upperBound
|
|
for n =1 +( m mod 2 =1) to m -1 step 2
|
|
term1 =2 *m *n
|
|
term2 =m *m -n *n
|
|
term3 =m *m +n *n
|
|
perimeter =term1 +term2 +term3
|
|
|
|
if perimeter <=perimeterLimit then triples =triples +1
|
|
|
|
a =term1
|
|
b =term2
|
|
|
|
do
|
|
r = a mod b
|
|
a =b
|
|
b =r
|
|
loop until r <=0
|
|
|
|
if ( a =1) and ( perimeter <=perimeterLimit) then 'we've found a primitive triple if a =1, since hcf =1. And it is inside perimeter range. Save it in an array
|
|
primitives =primitives +1
|
|
if term1 >term2 then temp =term1: term1 =term2: term2 =temp 'swap so in increasing order of side length
|
|
nEx =int( perimeterLimit /perimeter) 'We have the primitive & removed any multiples. Now calculate ALL the multiples in range.
|
|
extras =extras +nEx
|
|
end if
|
|
|
|
scan
|
|
next n
|
|
next m
|
|
|
|
print " Number of primitives having perimeter below "; 10^power, " was "; primitives, " & "; extras, " non-primitive triples."
|
|
print time$()
|
|
next power
|
|
|
|
print "End"
|
|
end
|