Trial Division
   HOME

TheInfoList



OR:

Trial division is the most laborious but easiest to understand of the
integer factorization In mathematics, integer factorization is the decomposition of a positive integer into a product of integers. Every positive integer greater than 1 is either the product of two or more integer factors greater than 1, in which case it is a comp ...
algorithms. The essential idea behind trial division tests to see if an integer , the integer to be factored, can be divided by each number in turn that is less than or equal to the
square root In mathematics, a square root of a number is a number such that y^2 = x; in other words, a number whose ''square'' (the result of multiplying the number by itself, or y \cdot y) is . For example, 4 and −4 are square roots of 16 because 4 ...
of . For example, to find the prime factors of , one can try to divide by successive primes: first, ; next, neither nor evenly divides ; finally, , and is itself prime. So . Trial division was first described by
Fibonacci Leonardo Bonacci ( – ), commonly known as Fibonacci, was an Italians, Italian mathematician from the Republic of Pisa, considered to be "the most talented Western mathematician of the Middle Ages". The name he is commonly called, ''Fibonacci ...
in his book '' Liber Abaci'' (1202).


Method

Given an integer ''n'' (''n'' refers to "the integer to be factored"), the trial division consists of systematically testing whether ''n'' is divisible by any smaller number. Clearly, it is only worthwhile to test candidate factors less than ''n'', and in order from two upwards because an arbitrary ''n'' is more likely to be divisible by two than by three, and so on. With this ordering, there is no point in testing for divisibility by four if the number has already been determined not divisible by two, and so on for three and any multiple of three, etc. Therefore, the effort can be reduced by selecting only
prime numbers A prime number (or a prime) is a natural number greater than 1 that is not a product of two smaller natural numbers. A natural number greater than 1 that is not prime is called a composite number. For example, 5 is prime because the only ways ...
as candidate factors. Furthermore, the trial factors need go no further than \scriptstyle\sqrt because, if ''n'' is divisible by some number ''p'', then ''n = p × q'' and if ''q'' were smaller than ''p'', ''n'' would have been detected earlier as being divisible by ''q'' or by a prime factor of ''q''. A definite bound on the prime factors is possible. Suppose is the 'th prime, so that ''P''1 = 2, ''P''2 = 3, ''P''3 = 5, etc. Then the last prime number worth testing as a possible factor of ''n'' is where ; equality here would mean that is a factor. Thus, testing with 2, 3, and 5 suffices up to ''n'' = 48 not just 25 because the square of the next prime is 49, and below ''n'' = 25 just 2 and 3 are sufficient. Should the square root of ''n'' be an integer, then it is a factor and ''n'' is a perfect square. The trial division algorithm in pseudocode: algorithm trial-division is input: Integer ''n'' to be factored output: List ''F'' of prime factors of ''n'' ''P'' ← set of all primes ≤ ''F'' ← empty list of factors for each prime ''p'' in ''P'' do while ''n'' mod ''p'' is 0 Add factor ''p'' to list ''F'' ''n'' ← ''n''/''p'' if ''F'' is empty ''(Original n is prime?)'' Add factor ''n'' to list ''F'' Determining the primes less than or equal to is not a trivial task as ''n'' gets larger, so the simplest computer programs to factor a number just try successive integers, prime and composite, from 2 to as possible factors.


Speed

In the worst case, trial division is a laborious algorithm. For a base-2 ''n'' digit number ''a'', if it starts from two and works up only to the square root of ''a'', the algorithm requires :\pi(2^) \approx trial divisions, where \pi(x) denotes the prime-counting function, the number of primes less than ''x''. This does not take into account the overhead of primality testing to obtain the prime numbers as candidate factors. A useful table need not be large: P(3512) = 32749, the last prime that fits into a sixteen-bit signed integer and P(6542) = 65521 for unsigned sixteen-bit integers. That would suffice to test primality for numbers up to 655372 = 4,295,098,369. Preparing such a table (usually via the Sieve of Eratosthenes) would only be worthwhile if many numbers were to be tested. If instead a variant is used without primality testing, but simply dividing by every odd number less than the square root the base-2 ''n'' digit number ''a'', prime or not, it can take up to about: :2^ In both cases, the required time grows exponentially with the digits of the number. Even so, this is a quite satisfactory method, considering that even the best-known algorithms have exponential time growth. For ''a'' chosen uniformly at random from integers of a given length, there is a 50% chance that 2 is a factor of ''a'' and a 33% chance that 3 is a factor of ''a'', and so on. It can be shown that 88% of all positive integers have a factor under 100 and that 92% have a factor under 1000. Thus, when confronted by an arbitrary large ''a'', it is worthwhile to check for divisibility by the small primes, since for a = 1000, in base-2 n=10. However, many-digit numbers that do not have factors in the small primes can require days or months to factor with the trial division. In such cases other methods are used such as the quadratic sieve and the general number field sieve (GNFS). Because these methods also have superpolynomial time growth a practical limit of ''n'' digits is reached very quickly. For this reason, in
public key cryptography Public-key cryptography, or asymmetric cryptography, is the field of cryptographic systems that use pairs of related keys. Each key pair consists of a public key and a corresponding private key. Key pairs are generated with cryptographic al ...
, values for ''a'' are chosen to have large prime factors of similar size so that they cannot be factored by any publicly known method in a useful time period on any available computer system or computer cluster such as
supercomputer A supercomputer is a type of computer with a high level of performance as compared to a general-purpose computer. The performance of a supercomputer is commonly measured in floating-point operations per second (FLOPS) instead of million instruc ...
s and computer grids. The largest cryptography-grade number that has been factored is RSA-250, a 250-digit number, using the GNFS and resources of several supercomputers. The running time was 2700 core years.


References

* *


External links

* Wikiversity offers a lesson on prime factorization using trial division with Python.
Fast JavaScript Prime Factor Calculator using trial division
Can handle numbers up to about 253

{{number theoretic algorithms Integer factorization algorithms Division (mathematics) Articles with example Python (programming language) code