*How to find repeated numbers that are perfect squares*

A repeated number is a number that can be split into two identical numbers. If you cut the number in the middle, the number on the left equals the number on the right.

Examples of repeated numbers are 11, 99, 3434, 123123, 13571357.

## Find All Repeated Numbers From 10 through 9,999,999,999,999,999

That is number 10 up to twelve 9s.

Looking at the problem, the first instinct may be to start a `for`

or `while`

loop from 10 through 999,999,999,999, like this algorithm:

1) for i = 10 to 9,999,999,999,999,999 2) Check if i is an repeated number. If no, move on to Step 4 or else Step 3. 3) i is an identical number; Check if square root of i is an integer. If yes, print i. 4) next for

While this may work, it will make way too many iterations. Let us look at a more efficient way to **fetch** all repeated numbers in that range.

## Efficient Way to Get Repeated Numbers In a Range

Let us consider the repeated numbers 11, 99, 3434, 123123, 13571357 and 9999999999.

We will **slice** đȘ the number in half and write each half in separate boxes.

1 | 1 |

9 | 9 |

34 | 34 |

123 | 123 |

1357 | 1357 |

99999 | 99999 |

If we want to print all repeated numbers from 11 through 9,999,999,999,999,999, we can create one half of the number as an integer, convert it to a string, repeat it and then convert it to an integer.

For example, if we want the repeated number 3434, we do this:

```
n = 34
n = str(n) * 2
n = int(n)
print(n)
print(type(n))
```

Output:

3434 <class 'int'>

## Print All Repeated Numbers From 11 through 999,999,999,999

Using the above logic, we can print all repeated numbers from 11 through 999,999,999,999.

We will use one half of 999,999,999,999 as the upper bound.

NOTE: We can also write 999,999 as 999_999 in Python, so we will use that syntax for large numbers.

```
for i in range(11, 99_999_999+1):
i = int(str(i) * 2)
print(i)
```

## Find If a Number Is a Perfect Square

If we want to check if the number 125 is a perfect square, we first find the square root and see if it returns an integer.

To find the square root of a number, we will import the `math`

library and use the `math.sqrt()`

function.

To check if a literal or variable is an integer, we can use the method `is_integer()`

.

This code will show you how to do it:

```
import math
# 125
if math.sqrt(125).is_integer():
print('Yes, 125 is a perfect square')
else:
print('No, 125 is NOT a perfect square')
# 81
if math.sqrt(81).is_integer():
print('Yes, 81 is a perfect square')
else:
print('No, it is NOT a perfect square')
```

Output:

No, 125 is NOT a perfect square Yes, 81 is a perfect square

## Python Program

Putting them all together, we come up with this:

```
import math
for i in range(11, 99_999_999+1):
n = int(str(i) * 2)
if math.sqrt(n).is_integer():
print(f'Yes, {n} is a repeated number and a perfect square')
```

We actually found 4 perfect squares which are repeated numbers.

Yes, 7783702677837026 is a repeated number and a perfect square Yes, 9801019998010199 is a repeated number and a perfect square Yes, 9998000299980002 is a repeated number and a perfect square Yes, 9999999999999999 is a repeated number and a perfect square

## Conclusion

There are 4 perfect squares which are repeated numbers. These numbers are very large in size.

In solving this problem, we optimized the algorithm to make the program more efficient. We achieved that by minimizing the number of iterations, using string functions to convert from integer and vice versa, and then use built-in functions like `is_integer()`

. Wherever possible, use built-in functions and treat every programming program like puzzle solving.

## Related Posts

If you have any questions, please contact me at arulbOsutkNiqlzziyties@gNqmaizl.bkcom. You can also post questions in our Facebook group. Thank you.