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