Math

advertisement
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<n; i++)


if (n%i==0)
return false;

return true;

We can make this code run faster by noticing that we
only need to check divisibility for values of i that are less
or equal to the square root of n
Implementation

public boolean isPrime (int n) {

if (n<=1)


if (n==2)



return true;
if (n%2==0)


return false;
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
Hints
3
5
7
3
3*3
3*5
3*7
5
5*3
5*5
5*7
7
7*3
7*5
7*7
Red: duplications
3*3
3*5
3*7
5*5
7*7
3
3*3*3
3*3*5
3*3*7
3*5*5
3*7*7
5
5*3*3
5*5*3
5*3*7
5*5*5
5*7*7
7
7*3*3
7*3*5
7*3*7
7*5*5
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
Download
Related flashcards

Elementary mathematics

20 cards

Functions and mappings

24 cards

Types of functions

21 cards

Mathematical analysis

32 cards

Functional analysis

24 cards

Create Flashcards