Asal Çarpanlarının Rakamlarını Toplayan Program
5
●2.582
- 04-04-2014, 19:39:07Üyeliği durdurulduMerhaba arkadaşlar biraz acil olarak c++ da olursa iyi olur ama c# da falan yapabilen olursada sorun yok .. İstediğim kullanıcıdan bir sayı alınacak örneğin 728 bunun asal çarpanlarını bulup onları toplaması gerekiyor örneğin 728=2*2*2*7*13 olduğunu bulacak ve 2+2+2+7+13=26 sonucunu vermesi gerekiyor nasıl yapabilirim
- 04-04-2014, 19:49:27Fonksiyon olarak yazmıştım hocam. Anlamadığın yer varsa sorabilirsin.cagdasdag adlı üyeden alıntı: mesajı görüntüle
int perfect(int x){ int b,i,geri,toplam=0; b=floor(x/2); // sayının yarısını alıyor. 100 yarısı 50'dir. 99 yarısı 49.5'tur ama floor ile 49 kabul ederek sıkıntısız çarpanları bulabiliriz. for(i=1;i<b+1;i++) { if( x%i==0 ) toplam+=i; //çarpanları mod=0 ile bulduk ve toplam değişkeninde sakladık. 10 sayısı için 1+2+5 = 8 = toplam gibi. } if(toplam==x) geri=1; else geri=0; return geri; - 04-04-2014, 20:50:16Üyeliği durdurulduelinize sağlık teşekkür ederimTolgahanuzun adlı üyeden alıntı: mesajı görüntüle
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 20:50:16 -->-> Daha önceki mesaj 19:51:15 --
arkadaşlar konuyu tam çözemedik bilgisi olan varsa hala yardıma ihtiyacım var - 04-04-2014, 23:56:54ufak kod bloğu hazırladım c# için çıktısı;
Tamsayıyı Girin
728
2 sayisi 3 kere çarpanıdır!
7 sayisi 1 kere çarpanıdır!
13 sayisi 1 kere çarpanıdır!
toplam : 26
int a, b; Console.WriteLine("Tamsayıyı Girin "); a = int.Parse(Console.ReadLine()); int total = 0; for (b = 2; a > 1; b++) if (a % b == 0) { int x = 0; while (a % b == 0) { a /= b; total += b; x++; } Console.WriteLine("{0} sayisi {1} kere çarpanıdır!", b, x); } Console.WriteLine("toplam : {0}",total); Console.ReadLine();iyi çalışmalar
edit : asal sayılarla ilgili uğraşıyorsan prime factorization sorunu konusuyla ilgileniyorsan,euclidean algorithm, fermat's little theorem ve chinese remainder theoremlerine göz atmanı tavsiye ederim. - 05-04-2014, 11:48:43Üyeliği durdurulduPeki şuanda örneğin 2 7 13 olarak alıyor asal sayıları ve topladığımızda 26 buluyor ancak bizim 26 değil sonuç olarak 17 bulmamız gerekiyor yani 2+2+2+7+1+3 yapması gerekiyor 13 üde basamaklarına ayırmamız gerekiyor bunu nasıl yapabilirim bir fikriniz varmı acabailkerxx adlı üyeden alıntı: mesajı görüntüle
- 05-04-2014, 13:35:08mesajın en basında toplam 26 sonucu vermesi gerekiyor demiştin ona göre yazdım bende.. neysecagdasdag adlı üyeden alıntı: mesajı görüntüle
böyle 1 den fazla basamaklı sayılarda ondalıklarına ayırmak lazım, tabi sayının uzunlugunu nasıl alırsın, işte burada en samimi arkadaşımız logaritma devreye girer bir sayının log10 tabanında değerini alırsan sana uzunlugun 1 eksiğini verir ozaman
int uzunluk = (int)Math.Log10(b) + 1 sana sayının basamak uzunlugunu verir, kodu bu şekilde değiştirdim umarım işine yarar..
int a, b; Console.WriteLine("Tamsayıyı Girin "); a = int.Parse(Console.ReadLine()); int total = 0; for (b = 2; a > 1; b++) if (a % b == 0) { int x = 0; while (a % b == 0) { a /= b; int basamak = (int)Math.Log10(b); if (basamak > 0) { //basamak uzunlugu 1 den fazlaysa int tmp = b; while (basamak > 0) { total+=tmp / 10; total += tmp % 10; tmp /= 10; basamak--; } } else { total += b; } x++; } Console.WriteLine("{0} sayisi {1} kere çarpanıdır!", b, x); } Console.WriteLine("toplam : {0}",total); Console.ReadLine();
böyle 1 den fazla basamaklı sayılarda ondalıklarına ayırmak lazım, tabi sayının uzunlugunu nasıl alırsın, işte burada en samimi arkadaşımız logaritma devreye girer bir sayının log10 tabanında değerini alırsan sana uzunlugun 1 eksiğini verir ozaman