Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
2 beğenilme 0 beğenilmeme
503 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.

$n\le 21$ olmak üzere $$\sqrt[n]{a_1a_2\ldots a_n}=(a_1+a_2+\cdots+a_n)-n$$ eşitliğini sağlayan $n$ basamaklı $a_1a_2\ldots a_n$ 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.5k puan) tarafından  | 503 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, \dots ,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, \dots 18$ değerlerini alabilir. Problemin koşulundan dolayı $x-n$ 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=(x-n)^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];

 

$a_1a_2\ldots a_n-(a_1+a_2+\cdots+a_n)-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,260 soru
21,785 cevap
73,460 yorum
2,346,175 kullanıcı