Skip to main content

Problem 5 Projecteuler.net Matlab Smallest Factor

Problem5-projecteuler.net

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

Solution

The solution for this problem is very simple. I have thought of the solution using prime factorization but my program has become so big which is not really necessary for solving this problem and I was unable to make it small using the looping system. If anyone can write a program using the prime factorization technique you are welcome and please post your solution in the comment below so that others can get benefited, Finally I have found a solution on a website written in c#, and I have converted that solution to Matlab.

Solution 2

First of all Thanks to Olubukola Ogunsola, who has commented/suggested/requested this solution.

Before we continue with the algorithm, remember that in the question you are asked to find the Least Common Multiple(LCM) of numbers from 1 to 20.

There is only one thing, one has to notice about LCM to understand the program. LCM is commutative.

So LCM(a,b,c) = LCM(LCM(a,b), c). The same has been used in the program. I have used the inbuilt lcm function. Have a look at the Program 2 for a better and simple program.

Program


%this program will find find the value of the smallest multiple of the
%given range

%here we have considered the range from 1 - 20
i = 20;
while(rem(i,2) ~= 0 || rem(i,3) ~= 0 || rem(i,4) ~= 0 || ...
        rem(i,5) ~= 0 || rem(i,6) ~=0 || rem(i,7) ~= 0 || rem(i,8) ~= 0 ...
         || rem(i,9) ~= 0 || rem(i,10) ~= 0 || rem(i,11) ~= 0 ...
          || rem(i,12) ~= 0  || rem(i,13) ~= 0  || rem(i,14) ~= 0 ...
           || rem(i,15) ~= 0 || rem(i,16) ~= 0 || rem(i,17) ~= 0 ...
            || rem(i,18) ~= 0 || rem(i,19) ~= 0 || rem(i,20) ~= 0)
        i = i+20;
end
fprintf('The smallest number divisible by the numbers in range of 1-20 is %d\n' ...
    ,i);

Get the matlab file for the above program from here: smallestfactor.m

Program 2


% LCM of 1 and 2
l = lcm(1,2);

% for loop for generating 3-20
for a = 3:20 
% commutative law of LCM
   l = lcm(l, a);
end

%printing the value
l

Explanation:

Approach 1

Before we continue about the explanation about the program you need to know about few things:
1) OR

Here first we will start a variable with a variable equal to 20. We have started with 20 because, every number below 20 will not satisfy the condition. In the same way the next 20 numbers will also do the same and the same follows upto infinity. In the while loop we will check whether the number is divisible by all the numbers from 2 to 20. If not then we will increase the number with 20(because of the sequence explained above) and this will continue until the given number is divisible by all the numbers from 2 to 20(1 was omitted because all the numbers are divisible by 1). Finally we will arrive at a stage where all the numbers are divisible by that number and it is the answer. finally the fprintf function will print the answer for us in a beautiful format. 

Note that " ... " in matlab tells the computer that we will continue the same program line in the next line and consider the next line in the same line.

This program has been taken from projecteuler.net and can be found here: problem 5

You can also download this post and read it offline from here: problem5-projecteuler_matlab.pdf

The above code was formatted using hilite.me

References:
1)   Creating a new variable in each iteration...
2)  Count number of specific values in matrix
3) Number of Nonzero elements in matrix - nnz function in Matlab

I have tried to explain it as easy as possible. Please let me know if you want any more explanation or changes in the program.

Try to solve the program in your way and share it below

Run the program and comment below the output you are getting for a given input.

Keywords: problem 5, projecteuler.net, smallest factor

Popular posts from this blog

Project Euler Problem 67 Solution with Python

Maximum path sum II By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23. 3 7 4 2 4 6 8 5 9 3 That is, 3 + 7 + 4 + 9 = 23. Find the maximum total from top to bottom in triangle.txt (right click and 'Save Link/Target As...'), a 15K text file containing a triangle with one-hundred rows.

Problem 43 Project Euler Solution with python

Sub-string divisibility The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property. Let d 1 be the 1 st digit, d 2 be the 2 nd digit, and so on. In this way, we note the following: d 2 d 3 d 4 =406 is divisible by 2 d 3 d 4 d 5 =063 is divisible by 3 d 4 d 5 d 6 =635 is divisible by 5 d 5 d 6 d 7 =357 is divisible by 7 d 6 d 7 d 8 =572 is divisible by 11 d 7 d 8 d 9 =728 is divisible by 13 d 8 d 9 d 10 =289 is divisible by 17 Find the sum of all 0 to 9 pandigital numbers with this property. One might write a simple solution using direct if else statements for this problem. Using if else statements, the execution time may be a few seconds. But this is not a very good approach. I too had written a program with if else statement which will take each and every permutation of the 0-9 Pandigital and check for the conditions given in the qu...

Add/Embed SVG to Blogger website

In this post I will tell you my method(trick) of adding SVG images in a blogger website or blog. Before starting , the first thin g I am assu m ing is that you are aware of SVG if you are here. If not please see S calable V ec tor G raphics Recently when I tried to embed a SVG image for a post on pygal, I tried uploading the SVG file and blogger Image uploader came up with an error, because of which I had to find some other way.  SVG File upload Error in Blogger  I started sea rc hing Google " Embed SVG in Blogger " . I found blogorrhea , w h ich gave some i nformatio n on add ing SVG directly as a markup , which worked , but I faced another problem using this . Also th is guy has used lot of Javascript which was confusin g for me, being new to using SVG.   So I first t houg ht of learning on h ow to embed SVG in HTML and t his on e worked out. Actually we can embed SVG in HTML i n following ways: Using Object tag Using Iframe tag Using embed...