• 04-04-2014, 19:39:07
    #1
    Üyeliği durduruldu
    Merhaba 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:27
    #2
    cagdasdag adlı üyeden alıntı: mesajı görüntüle
    Merhaba 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
    Fonksiyon olarak yazmıştım hocam. Anlamadığın yer varsa sorabilirsin.

    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
    #3
    Üyeliği durduruldu
    Tolgahanuzun adlı üyeden alıntı: mesajı görüntüle
    Fonksiyon olarak yazmıştım hocam. Anlamadığın yer varsa sorabilirsin.

    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;
    elinize sağlık teşekkür ederim

    --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:54
    #4
    ufak 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
    #5
    Üyeliği durduruldu
    ilkerxx adlı üyeden alıntı: mesajı görüntüle
    ufak 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.
    Peki ş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ı acaba
  • 05-04-2014, 13:35:08
    #6
    cagdasdag adlı üyeden alıntı: mesajı görüntüle
    Peki ş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ı acaba
    mesajın en basında toplam 26 sonucu vermesi gerekiyor demiştin ona göre yazdım bende.. neyse 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();