speeding up my for loop

1 回表示 (過去 30 日間)
Abhishek Sharma
Abhishek Sharma 2021 年 2 月 27 日
コメント済み: Abhishek Sharma 2021 年 2 月 27 日
%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;

採用された回答

Bruno Luong
Bruno Luong 2021 年 2 月 27 日
編集済み: Bruno Luong 2021 年 2 月 27 日
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
  1 件のコメント
Abhishek Sharma
Abhishek Sharma 2021 年 2 月 27 日
Thanks Bruno.

サインインしてコメントする。

その他の回答 (1 件)

Alan Stevens
Alan Stevens 2021 年 2 月 27 日
Is this any quicker?
function y = divisors1(N)
i = 1:floor(N/2);
L = lcm(N,i);
y = sum(L==N) + 1;
end
  1 件のコメント
Abhishek Sharma
Abhishek Sharma 2021 年 2 月 27 日
Thanks Alan. Since the iterations haven't changed ,it still stucks for big numbers.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by