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ı 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.