Merhabalar,
Yakın zamanda çözdüğüm bir problemi sizinle paylaşmak istiyorum. Çok hoşuma giden çıtır problemlerden biri. Sizlerden de çözümler almak isterim doğrusu.
Merhabalar, ilgileriniz için hepinize teşekkür ediyorum. @EkremDincel ve @dildeolupbiten hocalarımın kodlarını kendi bilgisayarımda python idle’ında aşağıdaki input için denedim .
1
1000000000 1000000000 1000000000
sonuçta problemde
a, b, c <= 10^9 ifadesi var.
Ben kendi kodumu çalıştırdım output olarak
497489713
verdi, ama sizin kodlar 1 sn limitini aştı. (TLE verdi.)
Şu noktayı söylemem lazım, 1000000007 sayısı asal bir sayıdır. Competitive programmingte sık sık kullanılır.
@dildeolupbiten hocam, fonksiyonunuzdaki base değeri zaten belli, 1000000007 . base parametresine gerek yok.
Linkini verdiğiniz soruda da ne tür parametreler ile 1 saniyenin altında cevap verilmesi gerektiğini göremedim. En başta dediğiniz gibi kısayollar kullanmak genel olarak daha verimli çalışabilir.
Saygılar abi , ama eğer o base asal olmazsa soru a, b, c <= 10^9 için çözülemez
Bu arada istiyorsanız çözümü de anlatabilirim. Ya da yazdığım kod anlaşılmıyorsa python ile de yazabilirim, vaktinizi öldürüyorsam kusuruma bakmayın, ama inanın çözümü öğrenince kazanan siz olacaksınız.
10^9 + 7 asal sayıdır. Şimdi ilk olarak
m = 10^9 + 7 diyelim.
a^n mod m = (a mod m)^n mod m
olduğu için
a^b^c mod m = (a mod m)^b^c mod m olur.
Kısaca a = a mod m diyorum.
Lise zamanlarında büyük sayılarla alakalı bazı formüller ezberlemiştik (öğrenmemiştik) ama işte zaman içinde kullanmayınca, bir de öğrenmek yerine ezber yapınca unutuluyor. Yoksa Python’ın 1000000000 ** 1000000000 ** 1000000000 işleminin sonucunu hesaplamasını beklemek çılgınca.
Hocam mesela atıyorum
x *y çok büyük bir sayı çıkıyorsa mod alıyorlar bunun için 10^9 + 7 asalını kullanıyorlar. Genelde böyle sorularda çözümün modu isteniyor, yoksa dediğiniz gibi bilgisayar Allah bilir ne zaman hesaplar.
x * y mod m = (x mod m) * (y mod m) mod m gibi formüller kullanıyorlar bu iş için.