কম্পিউটার

C++ এ চারটি বিভাজক


ধরুন আমাদের একটি পূর্ণসংখ্যা অ্যারে সংখ্যা আছে, আমাদের সেই অ্যারের পূর্ণসংখ্যার ভাজকের যোগফল খুঁজে বের করতে হবে যেখানে ঠিক চারটি ভাজক রয়েছে। সুতরাং অ্যারেতে যদি এমন কোনো পূর্ণসংখ্যা না থাকে, তাহলে 0 ফেরত দিন। উদাহরণস্বরূপ, যদি ইনপুটটি [২১, ৪, ৭] হয়, তাহলে আউটপুট হবে ৩২, যেমন ২১-এর চারটি ভাজক রয়েছে ১, ৩, ৭, ২১, 4 এর তিনটি ভাজক 1, 2, 4 এবং 7 এর দুটি ভাজক 1 এবং 7 রয়েছে৷ উত্তরটি শুধুমাত্র 21টির ভাজকের সমষ্টি৷

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

  • ok() নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি x ইনপুট হিসাবে গ্রহণ করবে

  • ret :=1 + x, cnt :=2

  • i :=2, i^2 <=x, i 1 দ্বারা বাড়ান

    • x যদি i

      দ্বারা বিভাজ্য হয়
      • i দ্বারা ret বাড়ান, cnt বাড়ান 1

      • যদি আমি x/i না হয়, তাহলে cnt 1 দ্বারা বাড়ান, ret :=ret + (x/i)

  • রিটার্ন ret, যদি cnt 4 হয়, অন্যথায় রিটার্ন 0

  • মূল পদ্ধতি থেকে

  • ret :=0, n :=সংখ্যার আকার

  • 0 থেকে n – 1

    রেঞ্জের i জন্য
    • ret :=ret + ok(সংখ্যা[i])

  • রিটার্ন রিটার্ন

উদাহরণ (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int ok(int x){
      int ret = 1 + x;;
      int cnt = 2;
      for(int i = 2; i * i <= x; i++){
         if(x % i == 0){
            ret += (i);
            cnt++;
            if(i != x / i){
               cnt++;
               ret += (x / i);
            }
         }
      }
      return cnt == 4 ? ret : 0;
   }
   int sumFourDivisors(vector<int>& nums) {
      int ret = 0;
      int n = nums.size();
      for(int i = 0; i < n; i++){
         ret += ok(nums[i]);
      }
      return ret;
   }
};
main(){
   vector<int> v = {21,4,7};
   Solution ob;
   cout << (ob.sumFourDivisors(v));
}

ইনপুট

[21,4,7]

আউটপুট

32

  1. C++ এ গেম ভি জাম্প করুন

  2. C++ এ সুন্দর অ্যারে

  3. C++-এ K ডিজিটগুলি সরান

  4. C++ এর নিকটতম বিভাজক