Şimdi Ara

Döngüler İle Sayıları Asal Çarpanlarına Ayırma Örneği

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
4 Misafir (1 Mobil) - 3 Masaüstü1 Mobil
5 sn
2
Cevap
0
Favori
2.716
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • İki tane for ve bir tane while döngüsü ile istediğimiz sayıyı asal çarpanlarına ayıran basit bir kodlama geliştirdim. Yeni olanlar için iyi bir örnek olacağını düşünüyorum.

    $sayi=924;
    for($c=1;$c<$sayi+1;$c++){
    $sayac=0;
    for($d=1;$d<$c+1;$d++){
    if($c%$d==0){
    $sayac++;
    }
    }
    if($sayac==2){
    while(1){
    if($sayi%$c==0){
    $sayi=$sayi/$c;
    echo $c;
    if($sayi!=1){
    echo "*";
    }
    }else{
    break;
    }
    }
    }
    }

    Kodları açıklıyorum. $sayi bizim asal çarpanlarına ayırmak istediğimiz sayı. Bildiğiniz gibi asal çarpanlara ayırmaya başlamadan önce asal sayıları elde etmemiz gerek. Bunun için üst limiti bizim $sayi mıza eşit olan bir for döngüsü başlatıyoruz. Burada $c değişkeni sırasıyla 1'den 924'e kadar olan değerleri alıyor. Bu döngünün içerinde de bir tane daha for döngüsü başlatıyoruz ve burada da $d değişkeninin $c ye eşit olana kadar artmasını istiyoruz. Bu arttırma sırasında $c/$d işlemi kalansız ise $sayac değişkeni bir artacak. Bildiğiniz gibi asal bir sayının yalnızca iki pozitif böleni vardır: Kendisi ve 1 sayısı. İşte eğer $c değişkeni kendisine kadar olan sayılardan($d değişkeni) yalnızca iki tanesine bölünebiliyorsa o zaman $c sayısı asaldır ve $sayac değişkeni de $c'nin kaç kere bölündüğünü göstermektedir. Yani if($sayac==2) deyiminden sonraki ifadelerin hepsinde $c sayısı asal bir sayıdır. Bu durumda while(1) şeklinde sonsuz bir döngü başlatıyoruz ve $sayi/$c işleminin kalansız olması durumunda $sayi yı $sayi/$c ye eşitliyoruz. Bu işlem $sayi=1 olana kadar devam edecek. Ayrıca $sayi/$c kalansız ise $c sayısı $sayi'nın asal çarpanlarından birisidir ve ekrana $c yi yazdırıyoruz. Eğer değilse de break ile sonsuz döngüyü kırıyoruz ve en tepedeki for döngüsü bir kez daha başlıyor. if($sayac!=1) kısmı kafanızı karıştırmasın onu yalnızca sayıları çarpanlarına ayırırken son sayıdan sonra "*" işaretinin çıkmaması için yaptım. Ekranın sonunda çıktı olarak "2*2*3*7*11" verilmiş olacak. Bu algoritma yalnızca PHP'de değil diğer programlama dillerinde de kullanılabilir. Aynısını javascript ile de yaptım o da burada:

    sayi=924
    for(c=1;c<sayi+1;c++){
    sayac=0
    for(d=1;d<c+1;d++){
    if(c%d==0){
    sayac++
    }
    }
    if(sayac==2){
    while(1){
    if(sayi%c==0){
    sayi=sayi/c
    document.write(c)
    if(sayi!=1){
    document.write("*")
    }
    }else{
    break
    }
    }
    }
    }







  • yaptığım birkaç değişiklik ile birlikte sayıları 2*2*3*3*5 şeklinde yazdırmak yerine 2^2*3^2*5 şeklinde yazdıran bir sistem daha geliştirdim. Bunda bu sefer array count values fonksiyonunu kullanıyoruz.

    $sayi=12345678910;
    $dizi=array();
    for($c=1;$c<$sayi+1;$c++){
    $sayac=0;
    for($d=1;$d<$c+1;$d++){
    if($c%$d==0){
    $sayac++;
    }
    }
    if($sayac==2){
    while(1){
    if($sayi%$c==0){
    $sayi=$sayi/$c;
    $dizi[]=$c;
    }else{
    break;
    }
    }
    }
    }
    $son=array_count_values($dizi);
    $l=count($son);
    $b=0;
    foreach($son as $anahtar => $deger){
    $b++;
    echo $anahtar;
    if($deger>1){
    echo "^".$deger;
    }
    if($b!=$l){
    echo "*";
    }
    }

    Javascriptte yeni olduğum için onu yazamadım




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.