%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 日

1 投票

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 日

0 投票

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.

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

カテゴリ

ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by