-- Find (p,q) such that x=p^2*q and q is square-free
sqf' :: Int -> Int -> (Int,Int)
sqf' _ 1 = (1,1)
-sqf' d x | x `mod` (sqr d) == 0 = (d*p1,q1)
+sqf' d x | x < (sqr d) = (1,x)
+ | x `mod` (sqr d) == 0 = (d*p1,q1)
| x `mod` d == 0 = (p2,d*q2)
| True = sqf' (d+1) x
where (p1,q1) = sqf' d (x `div` (sqr d))