Narsist Sayılar (Armstrong Sayılar) - Narcissistic Number

narsist-sayilar-armstrong-sayilar-narcissistic-number (büyük resim için tıklayın)

Bu gönderide “Narsistik (Armstrong)” sayıları tanımlamayıp PHP ile çözümlemesini gerçekleştireceğiz. Narsizm tanımı ile başlayalım. Narsizm kişinin kendi bedensel ve/veya zihinsel benliğine karşı duyduğu hayranlık ve bağlılık, kabaca tabirle kişinin kendisine aşık olması olarak tanımlanan bir terimdir. Narsistik sayılar ; “sayının her bir basamaktaki rakamının sayının toplam basamak sayısı kadar üssünün(kuvvetinin) alınması ve elde edilen değerlerin toplanması sonucunda kendine eşit olması” durumunda nitelendirilen sayılardır.

Örneğin; 153 sayısı, 3 basamaklıdır. 

  • ilk basamaktaki 3'in 3. üssü 27'dir,
  • ikinci basamaktaki 5'in 3.üssü 125'dir,
  • üçüncü basamaktaki 1'in 3.üssü 1'dir,

Elde edilen 27, 125, ve 1 değerleri toplandığında 27+125+1=153 değerini verir ve “toplam değeri, sayının kendisine eşit" olduğundan 153 narsistik sayıdır.

PHP ile çözümleyelim. Daha önce basamak işlemlerinde yazdığımız sınıfı kullanacağız. Kaynak için; Link1 ve Link2 tıklayın. Bu sınıfta rakamları diziye ayrıştırıp sayının basamak sayısını, rakamlar toplamını buluyorduk. Bu fonksiyonları kullanıp ek olarak narsist toplamını, narsist mi kontrolünü ve limit değerine kadar ulaşılmak istenen narsistik sayıları verecek narsistgetir fonksiyonunu kodlayacağız. Narsist toplamı için başlayalım,

  • function narsistToplam($array){
  • $us=$this->basamakSayisi($array); //$us=count($array);
  • $toplam=0;
  • for($i=1; $i<=$us; $i++){
  • $toplam+=pow($array[$i],$us);
  • }
  • return $toplam;
  • }

Yukarıdaki fonksiyona parametre olarak sorgulanacak sayının diziye ayrıştırılmış halini veriyoruz ve basamak sayısını elde ettikten sonra her bir dizi için kuvvetini alma işlemini pow fonksiyonu ile gerçekleştirip toplam değişkenine atıyoruz, son olarak toplam değeri return ediyoruz. 

Narsist olup olmadığı için fonksiyon yazmakla devam edelim,

  • function narsistMi($sayi){
  • $dizi=$this->rakamlariDiziyeAyristir($sayi);
  • $nartop=$this->narsistToplam($dizi);
  • return $sayi==$nartop? 1 : 0;
  • }

Yukarıdaki fonksiyon ile diziye ayrıştırıp bir önceki narsistToplam fonksiyonuna parametre olarak gönderip elde edilen toplam değerinin yazdığımız fonksiyondaki parametre olarak gelen sayı ile eşit olduğunda 1 olmadığı durumda 0 return ediyoruz.

Başlangıç ve bitiş değerleri arasındaki narsist sayıları return edecek fonksiyon yazalım.

  • function narsistGetir($baslangic,$bitis){
  • $narlar=array();
  • for($i=$baslangic; $i<=$bitis; $i++)
    • if($this->narsistMi($i)==1)
      • array_push($narlar,$i);
  •  
  • return $narlar;
  • }

Son olarak yazdığımız fonksiyonları kullanalım. 

  • $bi=new BasamakIslemler();
  • $sayi=153;
  • $dizi=$bi->rakamlariDiziyeAyristir($sayi);
  • echo "$sayi -> narsist toplamı: ".$bi->narsistToplam($dizi);
  • if($bi->narsistMi($sayi)==1)
    • echo "$sayi -> bir narsist sayıdır";
  • else
    • echo "$sayi -> bir narsist sayı değildir ";
  • $nars=$bi->narsistGetir(1,54748);
  • echo "<pre>";print_r($nars);echo "</pre>";

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)