Some numbers can be expressed as a difference of two squares, for example, 20 = 6^(2)-4^(2) and 21 = 5^(2)-2^(2). Many numbers can be written this way, but not all.

## Your Task
Complete the function that takes a positive integer `n` and returns the amount of numbers between `1` and `n` (inclusive) that can be represented as the difference of two perfect squares.

**Note**: Your code should be able to handle `n` values up to 45000

## Examples

```
n = 4 ==> 3
n = 5 ==> 4
n = 10 ==> 7
n = 20 ==> 15
n = 6427 ==> 4820
```

Source: codewars | Difficulty: EASY
Tags: Mathematics

Starter code: def count_squareable(n):
	

Solutions:
def count_squareable(n):
	return n // 4 + (n + 1) // 2


def count_squareable(n):
	return round(n * (3 / 4) - 0.24)


e = 10 ** (-2)

def count_squareable(n):
	return round(n * 3 / 4 - e)


count_squareable = lambda n: int(n * 0.75 + 0.25)


def count_squareable(n):
	return (n - 1) * 3 // 4 + 1


def count_squareable(n):
	return int(n * 0.75 + 0.25)


def count_squareable(n):
	count = 0
	for number in range(1, n + 1):
		if number % 4 == 2:
			count += 1
	return n - count


count_squareable = lambda Q: 1 + 3 * Q >> 2


archive = []
archive_values = {0: 0}

def count_squareable(n):

	def solve(nn):
		return next((1 for x in range(1, int(nn ** 0.5) + 1) if not nn % x and x % 2 == nn // x % 2), 0)
	first_ind = next((i for i in reversed(archive) if i <= n), 0)
	result = sum((solve(i) for i in range(first_ind + 1, n + 1))) + archive_values[first_ind]
	archive.append(n)
	archive_values[n] = result
	return result


def count_squareable(n):
	(q, r) = divmod(n, 4)
	if r < 2:
		num = 3 * q + r
	else:
		num = 3 * q + r - 1
	return num