import math as m def estUnCarre(k): return (int(m.sqrt(k)))**2 == k def facto(n): t= int(m.sqrt(n))+1 sp = t**2 - n while not estUnCarre(sp): t += 1 sp = t**2 -n print "+", return(int(t+m.sqrt(sp)),int(t-m.sqrt(sp))) print facto(5959) print facto(2953*3037) print facto(6197*6299) print facto(2953*3037) print facto(17729*17939) print facto(9623827) print facto(343570291)