speeding up my for loop

1 Ansicht (letzte 30 Tage)
Abhishek Sharma
Abhishek Sharma am 27 Feb. 2021
Kommentiert: Abhishek Sharma am 27 Feb. 2021
%My challenge is to find the number of divisors for a number without using "divisors" inbuild function
%this program will work but it's taking too much time for big numbers
%I read about vectorization to reduce the time but found stucked
%help!!!
function y=divisors1(N)
sum=0;
for i=1:floor(N/2)
if lcm(N,i)==N
sum=sum+1;
end
end
y=1+sum;

Akzeptierte Antwort

Bruno Luong
Bruno Luong am 27 Feb. 2021
Bearbeitet: Bruno Luong am 27 Feb. 2021
function y=divisors2(N)
f = factor(N);
[~,~,J] = unique(f);
n = accumarray(J,1);
y = prod(n+1);
end
Test
>> N=27022021
N =
27022021
>> divisors2(N)
ans =
8

Weitere Antworten (1)

Alan Stevens
Alan Stevens am 27 Feb. 2021
Is this any quicker?
function y = divisors1(N)
i = 1:floor(N/2);
L = lcm(N,i);
y = sum(L==N) + 1;
end
  1 Kommentar
Abhishek Sharma
Abhishek Sharma am 27 Feb. 2021
Thanks Alan. Since the iterations haven't changed ,it still stucks for big numbers.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by