Processing math: 100%
Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
2 beğenilme 0 beğenilmeme
612 kez görüntülendi
YouTube içerikleri yapmaya başladım. Bu da video sonunda sorduğum bilgisayarsal bir soru.
Ökkeş'e özel mesaj da gönderdim ama site içeriğinde de bulunsun istedim.

n21 olmak üzere na1a2an=(a1+a2++an)n
eşitliğini sağlayan n basamaklı a1a2an sayılarını bulacak bir kod yazınız ve bu sayıları bulunuz.

Video bağlantısı: https://www.youtube.com/watch?v=_GrHHi1Dnjo
Teorik Bilgisayar Bilimi kategorisinde (25.6k puan) tarafından  | 612 kez görüntülendi

2 Cevaplar

1 beğenilme 0 beğenilmeme

Oldukça hızlı çalışan bir Python kodu yazdım:

 

for n in range(2, 22):
    for x in range(n, 9*n + 1 ):
        m = (x-n)**n
        y = sum(int(digit) for digit in str(m))
        z = len(str(m))
        if x == y and n == z :
            print(m)

 

Çıktı olarak:

25
64
125
216
343

değerlerini veriyor. Yani istene özellikte beş tane sayı vardır. Bunlar 25,64,125,216,343 sayılarıdır. Kodların görevlerinin matematiksel açıklamlarını verebiliriz: 

for n in range(2, 22):

kodu ile n değişkenini 2'den başlatıp 21'e kadar (22 dahil değildir) sırasıyla değiştiriyoruz. Yani n=2,3,,21 değerlerini alacak. Bunlar bizim m sayımızın basamak sayısıdır. Sonra

for x in range(n, 9*n + 1 ):

kodu ile x değişkenini n'den 9n'e kadar değiştiriyoruz. Bu bizim m sayımızın rakamlarının toplamının alabileceği olası değerlerdir. Örneğin n=2 basamaklı bir m sayısı için rakamlar toplamı x=2,3,18 değerlerini alabilir. Problemin koşulundan dolayı xn bir pozitif tam sayı olmalıdır. Bu sebeple x'i 1'den değil n'den başlatıyoruz.

m = (x-n)**n

kodu ile m sayımızı m=(xn)n biçiminde tanımlıyoruz. Bu türdeki sayıları üretiyoruz. Sonra

y = sum(int(digit) for digit in str(m))
z = len(str(m))

kodları ile sırasıyla m'nin rakamlarının toplamını ve m'nin basamak sayısını hesaplatıyoruz. Son adımda da

if x == y and n == z :
    print(m)

kodu ile x=y (m'nin basamaklarındaki rakamların toplamının gerçekten x'e eşit olabilmesi) koşulu ve n=z (m'nin basamak sayısının gerçekten n'e eşit olabilmesi) koşulunu sağlayan m sayılarını yazdırıyoruz. Hepsi bu kadar.

(2.6k puan) tarafından 
0 beğenilme 0 beğenilmeme

Mathematica ile soyle yapilabilir. Onceleikle  4 ile 10 arasindakie sayilarin n. kuvvetlerini alalim ve bunlar icinde de n basamakli olanlari secelim. range ve list bunu yapar. 

 

range = Range[4, 10]^n; list = Pick[range, IntegerLength /@ range, n];

 

a1a2an(a1+a2++an)n)n=0 olanlar bizim aradiklarimiz.

Pick[list, list - (Total /@ IntegerDigits /@ list - n)^n, 0]

Bunu verir.

 

Her bir n icin donguyle hesaplariz..

Table[range = Range[4, 10]^n; list = Pick[range, IntegerLength /@ range, n];
 Pick[list, list - (Total /@ IntegerDigits /@ list - n)^n, 0], {n,2,22}]

 

{{25, 64}, {125, 216,  343}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}}

(2.9k puan) tarafından 
20,312 soru
21,866 cevap
73,586 yorum
2,847,691 kullanıcı