Transcript Math

Mathematical

Approach

  Many of these problems read as brain teasers at first, but can be worked through in a logical way.

Just remember to rely on the rules of mathematics to develop an approach, and then to carefully translate that idea into code.

Example

 Given two numbers m and n, write a method to return the first number r that is divisible by both (e.g., the least common multiple).

hints

   What does it mean for r to be divisible by m and n? It means that all the primes in m must go into r, and all primes in n must be in r.

   What if m and n have primes in common? For example, if m is divisible by 3^5 and n is divisible by 3^7, what does this mean about r?

It means r must be divisible by 3^7.

The Rule

For each prime p such that p^a \ m (e.g., m is divisible by p^a) and p^b \ n, r must be divisible by p^max(a, b).

Find the LCM of these sets of numbers.

 

3, 9, 21

Solution: List the prime factors of each. 3: 3 9: 3 × 3 21: 3 × 7 63 can be divided evenly by 3, 9, and 21.

12, 80

Solution: List the prime factors of each.

12: 2 × 2 × 3 80: 2 × 2 × 2 × 2 × 5 = 80 240 can be divided by both 12 and 80.

Algorithm

Prime

   A number is prime if it is only divisible by 1 and itself. So for example 2, 3, 5, 79, 311 and 1931 are all prime, while 21 is not prime because it is divisible by 3 and 7. To find if a number n is prime we could simply check if it divides any numbers below it. We can use the modulus (%) operator to check for divisibility:

Solution

    for (int i=2; i

Implementation

  }       public boolean isPrime (int n) { if (n<=1)  return false; if (n==2)  return true; if (n%2==0)  return false; int m=Math.sqrt(n); for (int i=3; i<=m; i+=2)  if (n%i==0)  return false; return true;

Problem

 Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7.

Hints

Hints

   3 * (previous number in list) 5 * (previous number in list) 7 * (previous number in list)     How would we find the next number in the list? Well, we could multiply 3, 5 and 7 times each number in the list and find the smallest element that has not yet been added to our list. This solution is O(n^2).

Not bad, but I think we can do better

3 5 7

Hints

Red: duplications

3

3*3 5*3 7*3 3 5 7

3*3

3*3*3 5*3*3 7*3*3

3*5

3*3*5 5*5*3 7*3*5

5

3*5 5*5 7*5

7

3*7 5*7 7*7

3*7

3*3*7 5*3*7 7*3*7

5*5

3*5*5 5*5*5 7*5*5

7*7

3*7*7 5*7*7 7*7*7

Hints

   In our current algorithm, we’re doing 3*1, 3*3, 3*5, 3*7, 3*9, 3*15, 3*21, 3*25 …, and the same for 5 and 7.We’ve already done almost all this work before—why are we doing it again?

We can fix this by multiplying each number we add to our list by 3, 5, 7 and putting the results in one of the three first-in-first-out queues.

To look for the next “magic” number, we pick the smallest element in the three queues.

Solution