কম্পিউটার

পাইথনে প্রদত্ত একঘেয়ে ক্রমানুসারে উপাদানের অবস্থান খুঁজুন


ধরুন আমাদের একটি সংখ্যা l এবং একটি একঘেয়ে ক্রমবর্ধমান ক্রম f(m), যেখানে f(m) =am + bm [log2(m)] + cm^3 এবং (a =1, 2, 3, …), (b =1, 2, 3, …), (c =0, 1, 2, 3, …)

এখানে [log2(m)] হল বেস 2-এর লগ এবং মানটি নিচের দিকে রাউন্ড করা। তাই,

যদি m =1, মান 0 হয়।

m =2-3 হলে, মান হল 1।

m =4-7 হলে, মান হল 2।

যদি m =8-15 হয়, মান হল 3. এবং তাই, অন

আমাদেরকে m এর মান খুঁজে বের করতে হবে যেমন f(m) =l, যদি l অনুক্রমে উপস্থিত না থাকে তাহলে আমাদের 0 প্রিন্ট করতে হবে। আমাদের মনে রাখতে হবে মানগুলি এমনভাবে যাতে সেগুলোকে উপস্থাপন করা যায় 64 বিট এবং তিনটি পূর্ণসংখ্যা a, b এবং c 100 এর কম বা সমান।

সুতরাং, যদি ইনপুট হয় a =2, b =1, c =1, l =12168587437017, তাহলে আউটপুট 23001 হবে f(23001) =12168587437017

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • SMALLER_VAL :=1000000

  • LARGER_VAL :=1000000000000000

  • একটি ফাংশন সমাধান () সংজ্ঞায়িত করুন। এটি a, b, c, n

    লাগবে
  • উত্তর :=a * n

  • lg_val :=n

    এর লগ বেস 2 এর মেঝে
  • ans :=ans + b * n * lg_val

  • ans :=ans + c * n^3

  • উত্তর ফেরত দিন

  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -

  • শুরু :=1

  • শেষ :=SMALLER_VAL

  • যদি c 0 এর মত হয়, তাহলে

    • শেষ :=LARGER_VAL

  • উত্তর :=0

  • শুরু করার সময় <=শেষ করুন, করুন

    • মধ্য :=(শুরু + শেষ) / 2 (শুধুমাত্র পূর্ণসংখ্যা অংশ নিন)

    • val :=সমাধান (a, b, c, mid)

    • যদি val k এর মত হয়, তাহলে

      • উত্তর :=মধ্য

      • লুপ থেকে বেরিয়ে আসুন

    • অন্যথায় যখন val> k, তারপর

      • শেষ :=মধ্য - 1

    • অন্যথায়,

      • শুরু :=মধ্য + 1

  • উত্তর ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from math import log2, floor
SMALLER_VAL = 1000000
LARGER_VAL = 1000000000000000
def solve(a, b, c, n) :
   ans = a * n
   lg_val = floor(log2(n))
   ans += b * n * lg_val
   ans += c * n**3
   return ans
def get_pos(a, b, c, k) :
   begin = 1
   end = SMALLER_VAL
   if (c == 0) :
      end = LARGER_VAL
   ans = 0
   while (begin <= end) :
      mid = (begin + end) // 2
      val = solve(a, b, c, mid)
      if (val == k) :
         ans = mid
         break
      elif (val > k) :
         end = mid - 1
      else :
         begin = mid + 1
   return ans
a = 2
b = 1
c = 1
k = 12168587437017
print(get_pos(a, b, c, k))

ইনপুট

2,1,1,12168587437017

আউটপুট

23001

  1. পাইথন প্রোগ্রাম একটি প্রদত্ত অবস্থান পর্যন্ত একটি অ্যারে বিপরীত করতে

  2. একটি 2D অ্যারেতে k'th ক্ষুদ্রতম উপাদান খুঁজে পেতে পাইথন প্রোগ্রাম

  3. পাইথন প্রোগ্রাম একটি তালিকায় সর্বাধিক এবং সর্বনিম্ন উপাদানের অবস্থান খুঁজে পেতে?

  4. পাইথনে এটি ধারণকারী একটি তালিকা দেওয়া একটি আইটেমের সূচী কিভাবে খুঁজে পাবেন?