Skip to main content

Generate the number of divisors of a given number using matlab functions method 2

Please note that the method 1 is slower than the method 2 for large numbers. See the explanation section to know why this is happening.

Problem

Write a function in matlab to generate the number of divisors of a given number. For example if the input is 28 then the value should be 6.

Solution

To understand this program you have to first understand the mathematics behind using the for loop till the square root of the number. For this let us consider the number 28. I will start writing this number from 1.
28 = 1x28 = 2x14 = 4x7

So the divisors are 1,2,4,7,14,28 and they can be written in pairs as (1,28),(2,14),(4,7) or if we will divide the number less than its square root then we will get all the divisors. So if a number below the square root divides the number(28) then it will correspond to an another number (for example the number 28 is divisible by 1 and thus it also corresponds to its pair value 28 and similarly 2 for 14, and 4 for 7). So twice total number of divisors less than the square root of the number will give the total number of divisors. Please try with more numbers to get a better understanding. If you still didn't understand properly then check the 1st link in the references section.

In this program I have used for loop, rem function, and if statement.If you don't know these then learn from here: For loop in Matlab
Find the explanation for the program below the program section.

Program


function counter = numberofdivisors2(n)
%This function will generate the number of divisors for a given number n

counter = 0;
for i = 1:int32(sqrt(n))
    if rem(n,i) == 0
        counter = counter+1;
    end
end
counter = counter*2;

Download the above program in matlab file format from here: numberofdivisors2.m

Explanation

This program is very simple to understand if you have understood the above solution section. Here we will know how the program works accordingly. We will consider the input of the funciton is 28 or we have called numberofdivisors2(28).
Let us see this program by following the iterations

First iteration

During the first iteration, the value of i is 1 and the if statement is true and the counter value will be added by 1.

Second iteration

During the second iteration, the value of i is 2 and the if statement is true and the counter value changes from counter = counter+1=1+1 = 2. and the second iteration comes to halt, now the third iteration starts

Third iteration

In the third iteration everything goes same but the if statement is not executed and thus the counter value doesn't change.

Fourth Iteration

Here the value of i is 4 and the if statement is true and the value of counter changes from counter = counter+1 = 2+1 = 3

Fifth Iteration - Final iteration

In this iteration, the value of i is 5 and the if statement is not true and thus this ends up. With the fifth iteration the for loop stops because we only have used till the square root of the number.

Finally in the program the counter is multiplied by 2 to give the correct number of divisors. Remember that this program till for loop will only give half of the number of divisors. So we have multiplied it by 2 to give the correct answer.

This program has been high lighted using hilite.me

References

2) http://www.mathblog.dk/triangle-number-with-more-than-500-divisors/

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

Keywords: number of divisors, matlab functions

Popular posts from this blog

Making a quiz web app with python and flask

Edit : When you are creating a web app with h tml templates, then y ou will have to sa ve the html file in templates folder in the Current Wor ki ng Directory( CWD). If you save the file in the C W D directl y you will get a TemplateNotFound error. Thank you Udhay for pointing it out.   In this post we will create a quiz website using python . I will be using the flask framework . After reading this tutorial you will learn form submission , flask templates , python code in flask templates , shuffling the questions and options with the random module and few others.  Please note that this tutorial is not big as it seems to be. Some of the code has been rewritten to maintain consistency and also font size is somewhat big so that your eyes won't get stressed reading this tutorial. Also the content has not occupied the full width of the page. In this tutorial I am assuming that you are having a very basic understanding of the flask framework . Please refer the documentation

Problem 11 Project Euler Solution with python

Largest product in a grid In the 20×20 grid below, four numbers along a diagonal line have been marked in red. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07

Problem 60 Project Euler Solution with python

Prime pair sets The primes 3, 7, 109, and 673, are quite remarkable. By taking any two primes and concatenating them in any order the result will always be prime. For example, taking 7 and 109, both 7109 and 1097 are prime. The sum of these four primes, 792, represents the lowest sum for a set of four primes with this property. Find the lowest sum for a set of five primes for which any two primes concatenate to produce another prime. This problem is j u st a brute force problem. If you have come here because you don't know the limit upto which you will h ave to gener ate the prime numbers t hen go ahe ad and t r y with 10,000 . When I first start ed solving the problem I chose 1 million(beca use most of the problem s on project E uler have this limit ), but it took very long for the computer to fin d the solution. After searching on the internet then I found many people choosing 10, 000 so I have changed my in put f rom 1 million to 10000 and the output was f ast. He