Given a number N, the task is to find the factors of N.
Input: N = 1000009
Output: 293 3413
293 * 3413 = 1000009
Input: N = 100000
Output: 800 125
800 * 125 = 100000
Euler’s Factorization method: Euler’s factorization method works on the principle that all the numbers N which can be written as the sum of two powers in two different ways can be factored into two numbers, (i.e) N = A2 + B2 = C2 + D2 where A != C and A != D, then there exists two factors for N.
Working of the algorithm: Let N be the number for which we need to find the factors.
- So, initially, we need to find two ways to represent N as the sum of powers of two numbers.
N = A2 + B2 N = C2 + D2 Therefore, N = A2 + B2 = C2 + D2
- Now, the algebraic operations are performed on the above equation to convert the equations as:
N = A2 + B2 = C2 + D2 -> N = A2 - C2 = D2 - B2 -> N = (A - C)(A + C) = (D - B)(D + B)
- Let K be the GCD of (A – C) and (D – B). So,
A - C = K * L D - B = K * M where GCD(L, M) is 1.
- Clearly, L = (A – C) / K and M = (D – B)/K. On substituting this in the initial equation:
N = K * L * (A + C) = K * M * (D + B) -> L * (A + C) = M * (D + B) ->l (A + C)/(D + B) = M/L
(A + C) = M * H (D + B) = L * H where, H = gcd((A + C), (D + B))
- Let Q = (K2 + H2)(L2 + M2).
-> ((KL)2 + (KM)2 + (HL)2 + (HM)2) -> ((A - C)2 + (D - B)2 + (D + B)2 + (A + C)2) -> ((2 * A)2 + (2 * B)2 + (2 * C)2 + (2 * D)2) -> 4 * N
N = ((K/2)2 + (H/2)2)(L2 + M2)
Such that there exists a pair K and H which are both even numbers.
Let’s visualize the above approach by taking an example. Let N = 221.
- 221 = 112 + 102 = 52 + 142
- From the above equation:
A = 11 - 5 = 6 B = 11 + 5 = 15 C = 14 - 10 = 4 D = 14 + 10 = 24
- Therefore, the above values can be used to compute the values of K, H, L and M.
K = GCD(6, 4) = 2 H = GCD(16, 24) = 8 L = GCD(6, 24) = 3 M = GCD(16, 4) = 2
221 = ((2/2)2 + (8/2)2) * (32 + 22) 221 = 17 * 13
Approach: In order to implement the above approach, the following steps are computed:
- Find the sum of squares by iterating a loop from 1 to sqrt(N) because no factor exists between [sqrt(N), N] apart from N and find two pairs whose sum of squares is equal to N.
- Store the values in A, B, C, D.
- Find the values of K, H, L and M using the formula mentioned in the above approach.
- Use the values of K, H, L and M to find the factors. Check the pair where both the numbers is even and divide them in half and find the factors.
Below is the implementation of the above approach:
a = 316 (A) a - c = 16 k = gcd[A, C] = 8 b = 12 (B) a + c = 616 h = gcd[B, D] = 56 c = 300 (C) d - b = 88 l = A/k = 2 d = 100 (D) d + b = 112 m = c/k = 11 Factors are: 800 125
Time Complexity: O(sqrt(N)), where N is the given number
Space Complexity: O(1)
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Fermat's Factorization Method
- Dixon's Factorization Method with implementation
- Fermat's Factorization method for large numbers
- Wheel Factorization Algorithm
- Sum of Factors of a Number using Prime Factorization
- Pollard's Rho Algorithm for Prime Factorization
- Prime Factorization using Sieve O(log n) for multiple queries
- Trial division Algorithm for Prime Factorization
- Count occurrences of a prime number in the prime factorization of every element from the given range
- Transportation Problem | Set 6 (MODI Method - UV Method)
- JQuery | parseXML() Method
- JQuery | trim() Method
- Program for Muller Method
- Program for Bisection Method
- Java Math incrementExact(int x) method
- Horner's Method for Polynomial Evaluation
- Program for Newton Raphson Method
- Primality Test | Set 2 (Fermat Method)
- Babylonian method for square root
- Array.GetValue() Method in C# with Examples | Set - 1
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.