কম্পিউটার

Python এ GCD বৃহত্তর করতে অ্যারে থেকে ন্যূনতম অপসারণ


ধরুন আমাদের কাছে N সংখ্যার একটি তালিকা আছে; আমাদের খুঁজে বের করতে হবে ন্যূনতম সংখ্যা অপসারণের প্রয়োজন যাতে অবশিষ্ট সংখ্যার GCD N সংখ্যার প্রাথমিক GCD থেকে বড় হয়৷

সুতরাং, যদি ইনপুটটি [6,9,15,30] এর মত হয়, তাহলে আউটপুট হবে 2 যেহেতু প্রাথমিক gcd 3, তাই 6 এবং 9 সরিয়ে দেওয়ার পরে আমরা 15, 15> 3 হিসাবে gcd পেতে পারি।

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

  • INF :=100001
  • spf :=উপাদান 0 থেকে INF সহ একটি তালিকা
  • একটি ফাংশন চালনী সংজ্ঞায়িত করুন()
  • 4 থেকে INF রেঞ্জের জন্য, 2 বাড়ান, করুন
    • spf[i] :=2
  • আমি 3 থেকে INF রেঞ্জের জন্য, কর
    • যদি i^2> INF −
      • ব্রেক
    • যদি spf[i] i এর মত হয়, তাহলে
      • 2 * i থেকে INF পর্যন্ত j এর জন্য, i দ্বারা প্রতিটি ধাপে আপডেট করুন, করুন
        • যদি spf[j] j এর মত হয়, তাহলে
          • spf[j] :=i
  • একটি ফাংশন সংজ্ঞায়িত করুন calc_fact()। এটি x
  • লাগবে
  • ret :=একটি নতুন তালিকা
  • যদিও x 1 এর মত নয়, do
    • ret এর শেষে spf[x] ঢোকান
    • x :=x / spf[x] (শুধুমাত্র পূর্ণসংখ্যা অংশ পান)
  • রিটার্ন রিটার্ন
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • g :=0
  • আমি 0 থেকে n রেঞ্জের জন্য, কর
    • g :=gcd(a[i], g)
  • my_map :=একটি নতুন মানচিত্র
  • আমি 0 থেকে n রেঞ্জের জন্য, কর
    • a[i] :=a[i] / g (শুধুমাত্র পূর্ণসংখ্যা অংশ পান)
  • আমি 0 থেকে n রেঞ্জের জন্য, কর
    • p :=calc_fact(a[i])
    • s :=একটি নতুন মানচিত্র
    • 0 থেকে p এর আকারের মধ্যে j এর জন্য, করুন
      • s[p[j]] :=1
    • s এর প্রতিটি i এর জন্য, করুন
      • my_map[i] :=my_map + 1 এর (i, 0) পান
  • সর্বনিম্ন =10^9
  • my_map-এ প্রতিটি i-এর জন্য, করুন
    • প্রথম :=i
    • সেকেন্ড :=my_map[i]
    • যদি (n - সেকেন্ড) <=সর্বনিম্ন, তারপর
      • সর্বনিম্ন :=n - সেকেন্ড
  • যদি ন্যূনতম 10^9 না হয়, তাহলে
    • নূন্যতম রিটার্ন
  • অন্যথায়,
    • রিটার্ন -1

উদাহরণ

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

__gcdINF =100001spf =[i এর জন্য i range(INF)]def sieve():i in range(4, INF, 2):spf[i] =2 এর জন্য i রেঞ্জে ( 3, INF):if i**2> INF:break if (spf[i] ==i):j রেঞ্জে (2 * i, INF, i):যদি (spf[j] ==j):spf[j] =idef calc_fact(x):ret =[] while (x !=1):ret.append(spf[x]) x =x // spf[x] রিটার্ন retdef minRemove(a, n):i এর জন্য g =0 রেঞ্জ(n):g =__gcd(a[i], g) my_map =dict() রেঞ্জে i এর জন্য:a[i] =a[i] // i এর জন্য g রেঞ্জ(n):p =calc_fact(a[i]) s =dict() রেঞ্জে j এর জন্য(len(p)):s[p[j]] =1 in i এর জন্য:my_map[i] =my_map .get(i, 0) + 1 সর্বনিম্ন =10**9 আমার_ম্যাপে i এর জন্য:প্রথম =i দ্বিতীয় =my_map[i] যদি ((n - সেকেন্ড) <=সর্বনিম্ন):সর্বনিম্ন =n - দ্বিতীয় যদি (সর্বনিম্ন ! =10**9):রিটার্ন মিনিমাম অন্য:রিটার্ন -1a =[6, 9, 15, 30]n =len(a)seve()print(minRemove(a, n))

ইনপুট

[6, 9, 15, 30], 4

আউটপুট

2

  1. পাইথনে একটি সদৃশ অ্যারে থেকে হারিয়ে যাওয়া উপাদান খুঁজুন

  2. পাইথনে সাবস্ট্রিং থেকে প্যালিনড্রোম তৈরি করতে পারে

  3. পাইথনে অ্যারে জিগজ্যাগ করতে উপাদানগুলি হ্রাস করুন

  4. পাইথনে সাজানো অ্যারে থেকে সদৃশগুলি সরান