37 lines
919 B
Julia
37 lines
919 B
Julia
function primitiven{T<:Integer}(m::T)
|
|
1 < m || return T[]
|
|
m != 2 || return T[1]
|
|
!isprime(m) || return T[2:2:m-1]
|
|
rp = trues(m-1)
|
|
if isodd(m)
|
|
rp[1:2:m-1] = false
|
|
end
|
|
for p in keys(factor(m))
|
|
rp[p:p:m-1] = false
|
|
end
|
|
T[1:m-1][rp]
|
|
end
|
|
|
|
function pythagoreantripcount{T<:Integer}(plim::T)
|
|
primcnt = 0
|
|
fullcnt = 0
|
|
11 < plim || return (primcnt, fullcnt)
|
|
for m in 2:plim
|
|
p = 2m^2
|
|
p+2m <= plim || break
|
|
for n in primitiven(m)
|
|
q = p + 2m*n
|
|
q <= plim || break
|
|
primcnt += 1
|
|
fullcnt += div(plim, q)
|
|
end
|
|
end
|
|
return (primcnt, fullcnt)
|
|
end
|
|
|
|
println("Counting Pythagorian Triplets within perimeter limits:")
|
|
println(" Limit All Primitive")
|
|
for om in 1:10
|
|
(pcnt, fcnt) = pythagoreantripcount(10^om)
|
|
println(@sprintf " 10^%02d %11d %9d" om fcnt pcnt)
|
|
end
|