Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function out = smallest_multiple(n)
- tic
- pra=[1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 137, 173]; %praštevila
- %jemlje po vrsti št od 1 do n in jih deli na zmnožek praštevil
- mnoz_pra=zeros(2,numel(pra)); %zapise kombinacijo prafaktorjev za trenutno stevilo
- mnoz_pra(2,:)=pra; %2. vrsta so prastevila
- for a=1:n %vzame število x, ki ga bo razstavljal na prafaktorje
- deljitelji=zeros(1,numel(pra));
- x=a;
- %ustvari prazno množico, kamor bo zapisoval kolikokrat posamezen prafaktor delji x
- while x>1 %delji dokler je x večji od 1
- for b=numel(pra):-1:1 %šteje praštevila pozadnsko
- y=pra(b); %vzame praštevilo
- if ~rem(x,y)
- deljitelji(1,b)=deljitelji(1,b)+1;
- x=x/y;
- break
- end
- end
- end
- for c=1:numel(pra) %se pomika po vrsti mnozice prafaktorjev
- if deljitelji(1,c)>mnoz_pra(1,c) %prepiše, če je blo za št. potrebnih več faktorjev, kot do zdaj
- mnoz_pra(1,c)=deljitelji(1,c);
- end
- end
- end
- stevilo_mnoz=mnoz_pra(2,:).^mnoz_pra(1,:);
- stevilo=uint64(prod(stevilo_mnoz(stevilo_mnoz>0))); %računa zmnožek
- mnoz=stevilo_mnoz;
- if stevilo < 2^64
- if n>42
- out=uint64(stevilo);
- return
- else
- out=uint64(stevilo);
- return
- end
- else
- out=uint64(0);
- end
- toc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement