**New course!**Every coder should learn

**Generative AI!**

0

# I am looking for a way to get the factors of a number in Python

I have tried using loops as shown in the code below. I just can't seem to find what's wrong (it'll only output "1 times X" and "X times 1" and no other factors. testNum = int(input("Enter an Integer: ")) leftNum = 1 rightNum = testNum for i in range(testNum): for i in range(testNum): if leftNum * rightNum == testNum: print("{} times {}".format(leftNum,rightNum) rightNum -= 1 leftNum += 1 (tilt device on side if lines don't show clearly)

8 Answers

+ 4

There might be something wrong with the indentation.
Here's a simpler way to do it:
testNum = int(input())
for leftNum in range(testNum//2+1):
for rightNum in range(testNum//2+1):
if leftNum * rightNum == testNum:
print(f'{leftNum} x {rightNum} = {testNum}')
/PS This one is a lot faster for bigger numbers:
testNum = int(input())
def getFactors(n):
for i in range(2, int(n**.5)+1):
if testNum % i == 0:
yield i
for f in getFactors(testNum):
print(f'{f} x {int(testNum/f)} = {testNum}')
(it will print each combination only once, so a * b = x, but not b * a = x)

+ 1

Thank you Anna! Perfect👌🖖

+ 1

Mayank It will only look up to the square root of the number because if you go any further, the "reverse" divisors already have been found (if there are any). If you look up to testNum//2+1, it will find both 3*4 and 4*3 for 12. If you stop at square root + 1, it will only find 3*4, but make the code much faster. You're right about the variable name.

+ 1

Thank You

+ 1

Anna oh, ok thanks i got it now

0

Hi, Anna can you please help me in understanding your code? why did you do square root of testnum in the second function, how will it give all the factors? Also testnum is not defined in the function scope i think you wanted to write the parameter n there.

0

So what is the code in the end? Im trying to get experience so Im gonna study this program