How to write an efficient script for perfect numbers

8 vues (au cours des 30 derniers jours)
K M
K M le 7 Avr 2017
Commenté : Walter Roberson le 25 Sep 2017
I have to display the first 4 perfect numbers but am running into a problem. The way I am trying it takes very very long to reach the last value (8128 or whatever). Figured out how to post code (there's a freaking button for it lol...)
for k = 1:9000
factors = divisors(k);
factors(end) = [];
if sum(factors) == k
disp(k)
end
  2 commentaires
KSSV
KSSV le 7 Avr 2017
You have to show code to figure out your difficulty..
K M
K M le 7 Avr 2017
As I was about to comment I just saw the button for 'code' lol... Anyway here's what I have:
for k = 1:9000
factors = divisors(k);
factors(end) = [];
if sum(factors) == k
disp(k)
end

Connectez-vous pour commenter.

Réponse acceptée

KSSV
KSSV le 7 Avr 2017
Try this:
for k = 1:9000
% factors = divisors(k);
D = 1:k ;
factors =D(rem(k,D)==0) ;
factors(end) = [] ;
if sum(factors) == k
disp(k)
end
end
  3 commentaires
Grace Lim
Grace Lim le 25 Sep 2017
@KSSV, sorry to bother you but can you explain this line '
factors =D(rem(k,D)==0)
Walter Roberson
Walter Roberson le 25 Sep 2017
rem(k,D) is the remainder when k is divided by D, which will be 0 when D exactly divides k. This code uses logical indexing to extract the exact divisors.

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by