See the method from here: Function to generate the number of divisors of a given number using matlab
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
Run the program and comment below the output you are getting for a given input.
Keywords: number of divisors, matlab functions