How do you print the number of factors in a number in python?

Source Code

# Python Program to find the factors of a number

# This function computes the factor of the argument passed
def print_factors(x):
   print("The factors of",x,"are:")
   for i in range(1, x + 1):
       if x % i == 0:
           print(i)

num = 320

print_factors(num)

Output

The factors of 320 are:
1
2
4
5
8
10
16
20
32
40
64
80
160
320

Note: To find the factors of another number, change the value of num.

In this program, the number whose factor is to be found is stored in num, which is passed to the print_factors() function. This value is assigned to the variable x in print_factors().

In the function, we use the for loop to iterate from i equal to x. If x is perfectly divisible by i, it's a factor of x.

Here is an example if you want to use the primes number to go a lot faster. These lists are easy to find on the internet. I added comments in the code.

# http://primes.utm.edu/lists/small/10000.txt
# First 10000 primes

_PRIMES = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 
        31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 
        73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 
        127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 
        179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 
        233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 
        283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 
        353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 
        419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 
        467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 
        547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 
        607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 
        661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 
        739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 
        811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 
        877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 
        947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 
# Mising a lot of primes for the purpose of the example
)


from bisect import bisect_left as _bisect_left
from math import sqrt as _sqrt


def get_factors(n):
    assert isinstance(n, int), "n must be an integer."
    assert n > 0, "n must be greather than zero."
    limit = pow(_PRIMES[-1], 2)
    assert n <= limit, "n is greather then the limit of {0}".format(limit)
    result = set((1, n))
    root = int(_sqrt(n))
    primes = [t for t in get_primes_smaller_than(root + 1) if not n % t]
    result.update(primes)  # Add all the primes factors less or equal to root square
    for t in primes:
        result.update(get_factors(n/t))  # Add all the factors associted for the primes by using the same process
    return sorted(result)


def get_primes_smaller_than(n):
    return _PRIMES[:_bisect_left(_PRIMES, n)]

The factor of any number is a whole number which exactly divides the number into a whole number without leaving any remainder.

For example, 3 is a factor of 9 because 3 divides 9 evenly leaving no remainder.

Problem

Create a Python program to find all the factors of a number.

Algorithm

Step 1:  Take a number

Step 2: Loop over every number from 1 to the given number

Step 3: If the loop iterator evenly divides  the provided number i.e. number % i == 0 print it.

Program

number = 69

print("The factors of {} are,".format(number))

for i in range(1,number+1):
    if number % i == 0:
        print(i)

Output

The factors of 69 are,
1
3
23
69
number = int(input("Enter a number "))
print("The factors of {} are,".format(number))

for i in range(1,number+1):
    if number % i == 0:
        print(i)

Output

Enter a number  469
The factors of 469 are,
1
7
67
469

PROGRAMS

This article is created to cover some programs in Python, to find and print factors of a number entered by user at run-time. Here are the list of approaches used:

  • Find Factors of a Number using while Loop
  • Using for Loop
  • Using Function

Note - Factors of a number say n are numbers that divides the number (n) exactly. For example, factors of 12 are 1, 2, 3, 4, 6, 12. All these six numbers divides 12 without leaving any remainder.

Find Factors of a Number using while Loop

To find factors of any number in Python, you have to ask from user to enter a number, then find and print its factors as shown in the program given below. The question is, write a Python program to find factors of a number using while loop. Here is its answer:

print("Enter the Number: ")
num = input()

num = int(num)
print("\nFactors of", num)

i = 1
while i<=num:
    if num%i==0:
        print(i)
    i = i+1

Here is the initial output produced by this Python program:

Now supply the input say 12 and press ENTER key to find and print all factors of 12 as shown in the snapshot given below:

The dry run of above program with user input 12, goes like:

  • Initial value, num = "12" (entered by user). In Python, anything received using input() treated as a string type value. Therefore using the following statement:
    num = int(num)
    the value of num gets converted into an integer type value. So num=12, and i=1
  • Now the condition (of while loop) i<=num or 1<=12 evaluates to be true, therefore program flow goes inside the loop
  • Inside the loop, the condition (of if) num%i==0 or 12%1==0 or 0==0 evaluates to be true, therefore program flow goes inside this if's body and the value of i gets printed as a factor of given number
  • Now the value of i gets incremented by 1. So i=2 now
  • Again the condition of while loop gets evaluated. That is the condition i<=num or 2<=12 evaluates to be true again, therefore program flow again goes inside the loop
  • Inside the loop, the condition (of if) num%i==0 or 12%2==0 or 0==0 again evaluates to be true, therefore program flow again goes inside its body and the value of i gets printed as another factor of 12
  • The value of i gets incremented. So i=3. Now the condition of while loop again gets evaluated. This time also the condition evaluates to be true, therefore program flow goes inside the loop
  • This process continues until the condition evaluates to be false
  • In this way, all factors of 12 (given number by user) gets printed, one by one

Modified Version of Previous Program

This is the modified version of previous program. This program uses end to skip inserting an automatic newline using print(). The str() is used to convert value to a string type. The try-except is used to handle invalid input.

print("Enter a Number: ", end="")
try:
    num = int(input())

    print("\nFactors of " +str(num)+ " are: ", end="")
    i = 1
    while i<=num:
        if num % i == 0:
            print(i, end=" ")
        i = i + 1
    print()
except ValueError:
    print("\nInvalid Input!")

Here is its sample run with user input 42:

Here is another sample run with an invalid user input say 23.4:

Find Factors of a Number using for Loop

This program does the same job as of previous program, but this program is created using for loop, instead of while. Let's have a look at the program first:

print("Enter a Number: ", end="")
try:
    num = int(input())

    print("\nFactors of " +str(num)+ " are: ", end="")
    for i in range(1, num+1):
        if num % i == 0:
            print(i, end=" ")
    print()
except ValueError:
    print("\nInvalid Input!")

In above program, the following code:

for i in range(1, num+1):

states that the statement inside it, gets executed num number of times with value of i from 1 to num. For example, if the value of num is 12, then the loop gets evaluated 12 times with value of i from 1 to 12.

Find Factors of a Number using Function

This program is created using a user-defined function named FindFact(). This function receives the number entered by user as its argument and prints all its factors from inside this function.

def FindFact(n):
    for i in range(1, n+1):
        if n % i == 0:
            print(i, end=" ")
    print()

print("Enter a Number: ", end="")
try:
    num = int(input())
    print("\nFactors of " +str(num)+ " are: ", end="")
    FindFact(num)
except ValueError:
    print("\nInvalid Input!")

This program produces exactly same output as of previous program.

Find Factors of a Number using Class

This is the last program, created using class, an object-oriented feature of Python.

class CodesCracker:
    def FindFact(self, n):
        for i in range(1, n+1):
            if n % i == 0:
                print(i, end=" ")

print("Enter a Number: ", end="")
try:
    num = int(input())
    print("\nFactors of " +str(num)+ " are: ", end="")
    ob = CodesCracker()
    ob.FindFact(num)
    print()
except ValueError:
    print("\nInvalid Input!")

To access member function named FindFact() of a class named CodesCracker, an object of this class is required. Therefore an object ob is created of class CodesCracker, and using . (dot) operator, I've accessed the member function of the class as shown in the program given above.

Python Online Test


« Previous Program Next Program »


How do you count factors of a number in Python?

How to find the factors of a number in Python.
number = 4..
factors = [].
for whole_number in range(1, number + 1):.
if number % whole_number == 0:.
factors. append(-whole_number) Append both factor and inverse..
factors. append(whole_number).
print(factors).

How do you print factors of a number?

Start loop from 1 to num by incrementing 1 in each iteration. something like this ( i=1, i<=num, i++); Then use if statement inside for loop to print factors of a number if ( num % i ==0 ) then i is a factor of num. If i is the factor of num then print it.

How do you print the factors of a number in Python for loop?

Find Factors of a Number using for Loop print("Enter a Number: ", end="") try: num = int(input()) print("\nFactors of " +str(num)+ " are: ", end="") for i in range(1, num+1): if num % i == 0: print(i, end=" ") print() except ValueError: print("\nInvalid Input!

How do you find how many factors does a number has?

The formula for the total number of factors for a given number is given by; Total Number of Factors for N = (a+1) (b+1) (c+1)