আমি দেখতে পাচ্ছি যে প্রচুর লোক ওভারফ্লো সম্পর্কে প্রশ্নের উত্তর দিয়েছিল, তবে আমি তার মূল সমস্যাটি সমাধান করতে চেয়েছিলাম। তিনি বলেন, সমস্যা ছিল একটি খ খুঁজে পাওয়া = সি যে সমস্ত অঙ্কটি পুনরাবৃত্তি না করে ব্যবহার করা হয়। ঠিক আছে, তিনি এই পোস্টে যা চেয়েছিলেন তা নয়, তবে আমি এখনও মনে করি যে সমস্যার ওপরের সীমানা অধ্যয়ন করা এবং এই সিদ্ধান্তে পৌঁছানো দরকার ছিল যে তাকে কখনই একটি অতিরিক্ত প্রবাহ গণনা বা সনাক্ত করার দরকার পড়েনি (দ্রষ্টব্য: আমি দক্ষ নই গণিতে তাই আমি এই পদক্ষেপটি ধাপে ধাপে করেছিলাম, তবে শেষের ফলাফলটি এত সহজ ছিল যে এটির একটি সহজ সূত্র থাকতে পারে)।
মূল বিষয়টি হ'ল যে ওপরের সীমানাটি সমস্যাটি একটি, বি বা সি এর জন্য প্রয়োজন 98.765.432। যাইহোক, তুচ্ছ এবং অপ্রয়োজনীয় অংশগুলিতে সমস্যাটি বিভক্ত করে শুরু করুন:
- x 0 == 1 (9, 8, 7, 6, 5, 4, 3, 2 এর সমস্ত অনুমতি সমাধান)
- x 1 == x (কোনও সমাধান সম্ভব নয়)
- 0 খ == 0 (কোনও সমাধান সম্ভব নয়)
- 1 খ == 1 (কোনও সমাধান সম্ভব নয়)
- এ বি , এ> ১, বি> ১ (তুচ্ছ নয়)
এখন আমাদের কেবল এটি দেখানো দরকার যে অন্য কোনও সমাধান সম্ভব নয় এবং কেবলমাত্র অনুমতিগুলি বৈধ হয় (এবং তারপরে তাদের মুদ্রণের কোডটি তুচ্ছ)। আমরা উপরের সীমানায় ফিরে যাই। আসলে উপরের সীমানা সি। 98.765.432। এটি উপরের সীমানা কারণ এটি 8 টি সংখ্যার (প্রতিটি এবং বি এর জন্য 10 সংখ্যার মোট বিয়োগ 1) সহ বৃহত্তম সংখ্যা। এই উপরের বাউন্ডটি কেবল গ এর জন্য কারণ খ এবং খ এর সীমানাগুলি খুব বেশি কম হওয়া উচিত কারণ তাত্পর্যপূর্ণ বৃদ্ধি, কারণ আমরা গণনা করতে পারি, খ 2 থেকে উপরের সীমানায় পৃথক:
9938.08^2 == 98765432
462.241^3 == 98765432
99.6899^4 == 98765432
39.7119^5 == 98765432
21.4998^6 == 98765432
13.8703^7 == 98765432
9.98448^8 == 98765432
7.73196^9 == 98765432
6.30174^10 == 98765432
5.33068^11 == 98765432
4.63679^12 == 98765432
4.12069^13 == 98765432
3.72429^14 == 98765432
3.41172^15 == 98765432
3.15982^16 == 98765432
2.95305^17 == 98765432
2.78064^18 == 98765432
2.63493^19 == 98765432
2.51033^20 == 98765432
2.40268^21 == 98765432
2.30883^22 == 98765432
2.22634^23 == 98765432
2.15332^24 == 98765432
2.08826^25 == 98765432
2.02995^26 == 98765432
1.97741^27 == 98765432
লক্ষ্য করুন, উদাহরণস্বরূপ শেষ লাইন: এটি বলে যে 1.97 ^ 27 ~ 98M। সুতরাং, উদাহরণস্বরূপ, 1 ^ 27 == 1 এবং 2 ^ 27 == 134.217.728 এবং এটি কোনও সমাধান নয় কারণ এটির 9 টি সংখ্যা রয়েছে (2> 1.97 সুতরাং এটি যা পরীক্ষা করা উচিত তার চেয়ে বড়)। এটি দেখা যায় যে, ক এবং খ পরীক্ষা করার জন্য উপলব্ধ সংমিশ্রণগুলি খুব ছোট। খ == ১৪ এর জন্য আমাদের ২ এবং ৩ চেষ্টা করে দেখতে হবে বি == 3 এর জন্য, আমরা ২ থেকে শুরু করে 462 এ থামি All সমস্ত ফলাফল ~ 98M এর চেয়ে কম হতে দেওয়া হয়েছে।
এখন কেবল উপরের সমস্ত সংমিশ্রণগুলি পরীক্ষা করুন এবং কোনও সংখ্যার পুনরাবৃত্তি না করে এমনগুলি সন্ধান করুন:
['0', '2', '4', '5', '6', '7', '8'] 84^2 = 7056
['1', '2', '3', '4', '5', '8', '9'] 59^2 = 3481
['0', '1', '2', '3', '4', '5', '8', '9'] 59^2 = 3481 (+leading zero)
['1', '2', '3', '5', '8'] 8^3 = 512
['0', '1', '2', '3', '5', '8'] 8^3 = 512 (+leading zero)
['1', '2', '4', '6'] 4^2 = 16
['0', '1', '2', '4', '6'] 4^2 = 16 (+leading zero)
['1', '2', '4', '6'] 2^4 = 16
['0', '1', '2', '4', '6'] 2^4 = 16 (+leading zero)
['1', '2', '8', '9'] 9^2 = 81
['0', '1', '2', '8', '9'] 9^2 = 81 (+leading zero)
['1', '3', '4', '8'] 3^4 = 81
['0', '1', '3', '4', '8'] 3^4 = 81 (+leading zero)
['2', '3', '6', '7', '9'] 3^6 = 729
['0', '2', '3', '6', '7', '9'] 3^6 = 729 (+leading zero)
['2', '3', '8'] 2^3 = 8
['0', '2', '3', '8'] 2^3 = 8 (+leading zero)
['2', '3', '9'] 3^2 = 9
['0', '2', '3', '9'] 3^2 = 9 (+leading zero)
['2', '4', '6', '8'] 8^2 = 64
['0', '2', '4', '6', '8'] 8^2 = 64 (+leading zero)
['2', '4', '7', '9'] 7^2 = 49
['0', '2', '4', '7', '9'] 7^2 = 49 (+leading zero)
এগুলির কোনওটিই সমস্যার সাথে মেলে না (এটি '0', '1', ..., '9' এর অনুপস্থিতিতেও দেখা যায়)।
উদাহরণ কোড যা এটি সমাধান করে। এছাড়াও লক্ষ করুন যে এটি পাইথনে লেখা হয়েছে, এটির জন্য নয় কারণ এটি স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার প্রয়োজন (কোডটি 98 মিলিয়নের চেয়ে বড় কিছু গণনা করে না), তবে কারণ আমরা জানতে পেরেছি যে পরীক্ষার পরিমাণ এত কম যে আমাদের উচ্চ স্তরের ভাষা ব্যবহার করা উচিত এর অন্তর্নির্মিত পাত্রে এবং লাইব্রেরিগুলি ব্যবহার করুন (এছাড়াও দ্রষ্টব্য: কোডটিতে 28 টি লাইন রয়েছে)।
import math
m = 98765432
l = []
for i in xrange(2, 98765432):
inv = 1.0/i
r = m**inv
if (r < 2.0): break
top = int(math.floor(r))
assert(top <= m)
for j in xrange(2, top+1):
s = str(i) + str(j) + str(j**i)
l.append((sorted(s), i, j, j**i))
assert(j**i <= m)
l.sort()
for s, i, j, ji in l:
assert(ji <= m)
ss = sorted(set(s))
if s == ss:
print '%s %d^%d = %d' % (s, i, j, ji)
# Try with non significant zero somewhere
s = ['0'] + s
ss = sorted(set(s))
if s == ss:
print '%s %d^%d = %d (+leading zero)' % (s, i, j, ji)