Kullanıcı tarafından girilen sayının asal çarpanlarını bulma algoritması;
clc clear all x=input('Bir sayı giriniz: '); %kullanıcının x için 72 degerini girdigini varsayarak %aşagıdaki döngüde yapılan işlemleri anlatacagım % x sayısının asal bölen sayısını bulalım x_asal_bolen=0; %asal bölenlerimizi bu degişkende dizi olarak tutacağız sayac=0; %sayac ile dizinin indisini oluşturduk i=2; % Bir sayıyı 2'den başlayarak böleriz durum=1; %while döngüsünden çıkmak için koşulumuzu oluşturacak while durum if mod(x,i)==0 % x, i'ye tam bölünür mü ? sayac=sayac+1; %dizinin indisi olan sayacı 1 artır x_asal_bolen(sayac)=i; % i'yi asal bölen içine yaz x=x/i; %sayımız i'ye bölünerek küçüldü else i=i+1; % örnegin sayımız i=2 için bölünmüyorsa % i=3'e bölünüp bölğnmedigini bulmak için % i'yi 1 artırdık. end if i>x durum=0; end end %örnegin 72 sayısı için x_asal_bolen degişkeninin içinde %tutulan sayılar [2 2 2 3 3] %bu kuvvetleri aşagıdaki algoritma ile; %[0 2 3; % 0 3 2] haline getirecegiz. %algoritmanın görevi asal sayı 2'yi 2'inci %idise yazmak ve kuvvetinide alt satırına eklemek %x'in asal bölenlerin kuvvetlerini toplayalım x_bolen_kuvvet=[0;0]; for i=1:size(x_asal_bolen,2) x_bolen_kuvvet(1,x_asal_bolen(i))=x_asal_bolen(i); x_bolen_kuvvet(2,x_asal_bolen(i))=x_bolen_kuvvet(2,x_asal_bolen(i))+1; end %[0 2 3; % 0 3 2] halinde ki matrisimizi %[2 3; % 3 2] haline aşagıdaki algoritma ile getirelim %x_bolen_kuvvet degişkeninin içindeki sıfırları atıyoruz sayac=0; for i=1:size(x_bolen_kuvvet,2) if x_bolen_kuvvet(1,i)~=0 sayac=sayac+1; x_asal(1,sayac)=x_bolen_kuvvet(1,i); x_asal(2,sayac)=x_bolen_kuvvet(2,i); end end disp(x_asal)
Yorumlar
Yorum Gönder