মডুলার পাওয়ার টাওয়ারগুলি মূল্যায়ন করুন


13

দুটি এবং এন এবং এম দেওয়া হয়েছে, অসীম পাওয়ার টাওয়ারটি মূল্যায়ন করুন:

n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... মোড এম

মনে রাখবেন যে right সঠিক-সংঘবদ্ধ। সুতরাং 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4)। এখন আপনি কীভাবে ডান-অ্যাসোসিয়েটিভ অপারেটরগুলির অসীম অনুক্রমের জন্য কোনও মান নির্ধারণ করতে পারেন?

F (n, m, i) কে অসীম পাওয়ার টাওয়ারের প্রথম প্রথম পদগুলির সমন্বিত পাওয়ার টাওয়ার হিসাবে সংজ্ঞায়িত করুন। তারপরে কিছু ধ্রুব সি রয়েছে যা প্রতি i> C, f (n, m, i) = f (n, m, C) এর জন্য। সুতরাং আপনি বলতে পারেন অসীম শক্তি টাওয়ার একটি নির্দিষ্ট মানকে রূপান্তর করে। আমরা সেই মানটিতে আগ্রহী।


আপনার প্রোগ্রামটি অবশ্যই একটি যুক্তিসঙ্গত আধুনিক পিসিতে 10 সেকেন্ডের নীচে এন = 2017, এম = 10 ^ 10 গণনা করতে সক্ষম হবে। এটি হ'ল, আপনার একটি আসল অ্যালগরিদম বাস্তবায়ন করা উচিত, কোনও ব্রুটেফোর্সিং নয়।

আপনি যে অনুমান হতে পারে এন <2 30 এবং মি <2 50 আপনার প্রোগ্রামিং ভাষায় সংখ্যাসূচক সীমা জন্য, কিন্তু আপনার অ্যালগরিদম অবশ্যই তাত্ত্বিক যে কোনো আকারের জন্য কাজ এন , মি । তবে আপনার প্রোগ্রামটি অবশ্যই এই আকার সীমাতে থাকা ইনপুটগুলির জন্য সঠিক হতে হবে , যদি ইনপুটগুলি এই সীমাতে থাকে তবে অন্তর্বর্তী মান ওভারফ্লোগুলি ক্ষমা করবেন না

উদাহরণ:

2, 10^15
566088170340352

4, 3^20
4

32, 524287
16

টিপ (প্রতিযোগী জন্য): nএবং mকরছে না সহ-প্রধান হতে নিশ্চিত।
ফাঁস নুন

1
10 ^ 10 (এবং 10 ^ 20, এবং স্বাক্ষরিত পূর্ণসংখ্যার জন্য 3 ^ 20) অনেকগুলি ভাষার ডিফল্ট পূর্ণসংখ্যার চেয়ে বড়। এটির প্রয়োজন কি এই বড় একটি ইনপুট সমর্থন করা উচিত?
ডুরকনবব

1
@orlp "হ্যা" এর মধ্যে কি 10 ^ 20 অন্তর্ভুক্ত রয়েছে? কারণ এটি একটি -৪-বিট পূর্ণসংখ্যার সাথে খাপ খায় না, সুতরাং আপনার যদি এটি প্রয়োজন হয় তবে আমি এটিকে স্পষ্টভাবে উল্লেখ করার পরামর্শ দেব কারণ অন্যথায় আপনি লোকেদের দ্বারা that৪ বিট ধরে অনেকগুলি অবৈধ উত্তর পেতে যাচ্ছেন um পূর্ণসংখ্যা যথেষ্ট সঠিক হতে চলেছে।
মার্টিন ইন্ডার

1
উভয় ক্ষেত্রেই, কি হল বৃহত্তম ইনপুট আমরা সমর্থন করতে হবে?
মার্টিন ইন্ডার

@ ডুরকনব আমি চ্যালেঞ্জের জন্য আরও স্বল্প সীমাবদ্ধতা যুক্ত করেছি। তবে আপনার অ্যালগরিদম অবশ্যই তাত্ত্বিকভাবে যে কোনও আকারের জন্য কাজ করতে হবে মি, এন
orlp

উত্তর:


7

পাইথ, 23 বাইট

M&tG.^HsgBu-G/GH{PGGhHG

এই ক্রমে মি এবং এনg গ্রহণ করে একটি ফাংশন সংজ্ঞায়িত করে ।

এটি অনলাইনে চেষ্টা করুন

কিভাবে এটা কাজ করে

M&tG.^HsgBu-G/GH{PGGhHG
M                         def g(G, H):
 &tG                        0 if G == 1, else …
                 PG         prime factors of G
                {           deduplicate that
          u-G/GH   G        reduce that on lambda G,H:G-G/H, starting at G
                              (this gives the Euler totient φ(G))
        gB          hH      bifurcate: two-element list [that, g(that, H + 1)]
       s                    sum
    .^H               G     H^that mod G

পাইথন 2, 109 76 বাইট

import sympy
def g(n,m):j=sympy.totient(m);return m-1and pow(n,j+g(n+1,j),m)

এটি অনলাইন চেষ্টা করুন!

কেন এটি কাজ করে

আমরা নিম্নলিখিত সাধারণীকরণ ব্যবহার ইউলার উপপাদ্য

থিম। n 2φ ( এম )n φ ( এম ) (মোড মি ) সমস্ত এন এর জন্য ( এন এম এর মুলত কপিরাইট হয় কিনা )।

প্রমাণ: সব মৌলিক শক্তিগুলি পি বিভাজক মি ,

  • যদি পি ভাগ করে n , তবে কারণ φ ( এম ) ≥ φ ( পি কে ) = পি কে - 1 ( পি - 1) k 2 কে - 1কে , আমাদের এন 2φ ( এম ) ≡ 0 ≡ n φ ( এম ) (মোড পি কে )
  • অন্যথায়, কারণ φ ( পি কে ) বিভাজক φ ( এম ), ইউলারের উপপাদ n 2φ ( এম ) ≡ 1 ≡ n φ ( এম ) (মোড পি কে ) দেয়।

অতএব, এন 2φ ( এম )n φ ( এম ) (মোড এম )।

সম্পুরক। যদি কে ≥ φ ( এম ) হয়, তবে n kn φ ( এম ) + ( কে মোড φ ( এম )) (মোড এম )।

প্রমাণ: তাহলে ≥ 2φ ( মি ), থিম দেয় এন = 2φ ( মি ) এন - 2φ ( মি )এন φ ( মি ) এন - 2φ ( মি ) = - φ ( মি ) ( মোড মি ) এবং ক্ষুদ্রতর 2onent ( মি ) এর চেয়ে কম না হওয়া পর্যন্ত আমরা পুনরাবৃত্তি করব ।


বেস এবং মডুলো কপিরাইট না হওয়া অবস্থায় এটি কীভাবে পরিচালনা করবে? পিএস সিম্পির মোট কার্যকারিতা রয়েছে।
orlp

@orlp আমি একটি প্রমাণ যুক্ত করেছি আমি কীভাবে মিস করেছি তা নিশ্চিত নয় sympy.totient
অ্যান্ডারস ক্যাসরগ

আমি এখন দেখি. দুর্দান্ত পদ্ধতি!
অরপাল

5

হাস্কেল , 156 বাইট

(?)দুটি গ্রহণ করে Integerএবং একটি ফেরত দেয় Integer, হিসাবে ব্যবহার করুন (10^10)?2017(ওপি তুলনায় বিপরীত ক্রম)

1?n=0
m?n=n&m$m#2+m#2?(n+1)
1#_=1
n#p|m<-until((<2).gcd p)(`div`p)n=m#(p+1)*1`max`div(n*p-n)(p*m)
(_&_)0=1
(x&m)y|(a,b)<-divMod y 2=mod(x^b*(mod(x*x)m&m)a)m

এটি অনলাইন চেষ্টা করুন! (আমি কেসগুলি এবার হেডারে পরীক্ষার জন্য রেখেছি, যেহেতু তারা ঘৃণ্য স্বরলিপি ব্যবহার করে))

কৌতূহলজনকভাবে ধীরতম টেস্ট কেস গতির সীমা (এটি প্রায় তাত্ক্ষণিক) সহকারে এক নয়, তবে 524287 ? 32একটি, কারণ 524287অন্যান্য পরীক্ষার মামলার কারণগুলির তুলনায় এটি অনেক বড় প্রাইম।

কিভাবে এটা কাজ করে

  • (x&m)yহয় x^y `mod` m, অথবা ক্ষমতা মুড, বর্গ দ্বারা exponentiation ব্যবহার করে।
  • n#pঅ্যালার টোটিনেন্ট ফাংশন এটি n, ধরে nনেওয়া এর চেয়ে ছোট কোনও প্রধান কারণ নেই p
    • mহয় nএমন সমস্ত pকারণের বাইরে বিভক্ত।
    • যদি এই kজাতীয় কারণ থাকে তবে মোটামুটি নিজেই একটি সংশ্লিষ্ট ফ্যাক্টর পাওয়া উচিত (p-1)*p^(k-1), যা হিসাবে গণনা করা হয় div(n*p-n)(p*m)
    • 1`max`...কেসটি পরিচালনা করে যেখানে nপ্রকৃতপক্ষে বিভাজ্য ছিল না p, যা অন্যের সাথে maxসমতুল্য যুক্তি তৈরি করে 0
  • প্রধান ফাংশনটি m?nব্যবহার করে যে যখন yযথেষ্ট পরিমাণে বড় n^y `mod` mহয় n^(t+(y`mod`t)) `mod` m, tতার সমষ্টি যখন হয় m। (এই t+প্রধান বিষয়গুলির জন্য প্রয়োজনীয়তা রয়েছে nএবং mএটি সাদৃশ্যপূর্ণ, যা সমস্ত সর্বাধিক বৃদ্ধি পায়))
  • অ্যালগরিদম থেমে যায় কারণ পুনরাবৃত্ত সামগ্রীর ফাংশনগুলি শেষ পর্যন্ত 1 টি হিট করে।

1

গণিত, 55 বাইট

n_~f~1=0;n_~f~m_:=PowerMod[n,(t=EulerPhi@m)+f[n+1,t],m]

উদাহরণ:

In[1]:= n_~f~1=0;n_~f~m_:=PowerMod[n,(t=EulerPhi@m)+f[n+1,t],m]

In[2]:= f[2, 10^15]

Out[2]= 566088170340352

In[3]:= f[4, 3^20]

Out[3]= 4

In[4]:= f[32, 524287]

Out[4]= 16

In[5]:= f[2017, 10^10]

Out[5]= 7395978241

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.