Factor the natural number C=(a+1)(a+b) by finding the solution to C=T(a)+T(a+b)-T(b-1) where T(n) is the nth triangular number."Discovery consists of seeing what everybody has seen and thinking what nobody has thought."
— Albert Szent-Györgyi
- T(n) := n(n+1)/2
- S(a, b) := T(a)+T(a+b)-T(b-1)
- (a+1)(a+b)=T(a)+T(a+b)-T(b-1)
- a2+ab+a+b=a(a+1)/2+(a+b)(a+b+1)/2-(b-1)b/2
- 2a2+2ab+2a+2b=a(a+1)+(a+b)(a+b+1)-(b-1)b
- 2a2+2ab+2a+2b=a2+a+a(a+b+1)+b(a+b+1)-b2+b
- 2a2+2ab+2a+2b=a2+a+a2+ab+a+ba+b2+b-b2+b
- 2a2+2ab+2a+2b=2a2+2ab+2a+2b
- 0=0
- S(a, b) > S(a-1, b+1)
- (a+1)(a+b) > (a+1-1)(a-1+b+1)
- a(a+b)+a+b > a(a+b)
- a+b > 0
- S(a, b) < S(a, b+max(1, ceil((C-S(a, b))/(a+1))))
- (a+1)(a+b) < (a+1)(a+b+max(1, ceil((C-S(a, b))/(a+1))))
- a+b < a+b+max(1, ceil((C-S(a, b))/(a+1)))
- 0 < max(1, ceil((C - S(a, b))/(a+1)))
- 0 < 1
output: found factors
- let a = floor( sqrt( C ) ) - 1
- let b = 1
- if S(a, b) > C then a=a-1, b=b+1
- else if S(a, b) < C then b=b+max(1, ceil((C-S(a, b))/(a+1)))
- else if S(a, b) = C then exit: found factors (a+1) and (a+b)
- go to step 3
- S(6, 1) = 49 => b = b + max(1, ceil(2/7))
- S(6, 2) = 56 => a = a - 1, b = b + 1
- S(5, 3) = 48 => b = b + max(1, ceil(3/6))
- S(5, 4) = 54 => a = a - 1, b = b + 1
- S(4, 5) = 45 => b = b + max(1, ceil(6/5))
- S(4, 7) = 55 => a = a - 1, b = b + 1
- S(3, 8) = 44 => b = b + max(1, ceil(7/4))
- S(3, 10) = 52 => a = a - 1, b = b + 1
- S(2, 11) = 39 => b = b + max(1, ceil(12/3))
- S(2, 15) = 51 => 51 = 3 * 17
- S(3, 1) = 16 => b = b + max(1, ceil(7/4))
- S(3, 3) = 24 => a = a - 1, b = b + 1
- S(2, 4) = 18 => b = b + max(1, ceil(5/3))
- S(2, 6) = 24 => a = a - 1, b = b + 1
- S(1, 7) = 16 => b = b + max(1, ceil(7/2))
- S(1, 11) = 24 => a = a - 1, b = b + 1
- S(0, 12) = 12 => b = b + max(1, ceil(11/1))
- S(0, 23) = 23 => 23 = 1 * 23
- S(13, 1) = 196 => b = b + max(1, ceil(25/14))
- S(13, 3) = 224 => a = a - 1, b = b + 1
- S(12, 4) = 208 => b = b + max(1, ceil(13/13))
- S(12, 5) = 221 => 221 = 13 * 17
- S(5, 1) = 36 => 36 = 6 * 6