ধরুন আমাদের একটি ইন্টিজার অ্যারে nums আছে। আমাদের সেটিতে যেসব ইন্টিজারের ঠিক চারটি ভাগফল (divisor) আছে, তাদের ভাগফলগুলোর যোগফল বের করতে হবে। যদি এমন কোনো ইন্টিজার না থাকে, তবে 0 রিটার্ন করুন। উদাহরণস্বরূপ, ইনপুট [21, 4, 7] হলে আউটপুট হবে ৩২, কারণ ২১-এর চারটি ভাগফল ১, ৩, ৭, ২১; ৪-এর তিনটি ভাগফল ১, ২, ৪; এবং ৭-এর দুটি ভাগফল ১ এবং ৭। উত্তর শুধু ২১-এর ভাগফলগুলোর যোগফল।
সমাধানের ধাপগুলো:
ok() নামে একটি মেথড ডিফাইন করুন, যা x ইনপুট নেবে
ret := 1 + x, cnt := 2
i := 2 থেকে i^2 <= x পর্যন্ত লুপ চালান, i ১ বাড়াতে
যদি x i-দিয়ে বিভাজ্য হয়
ret-এ i যোগ করুন, cnt ১ বাড়ান
যদি i != x/i হয়, তবে cnt ১ বাড়ান, ret := ret + (x/i)
যদি cnt == 4 হয় তবে ret রিটার্ন করুন, অন্যথায় 0
মেইন মেথড থেকে
ret := 0, n := nums-এর সাইজ
i = 0 থেকে n – 1 পর্যন্ত লুপ চালান
ret := ret + ok(nums[i])
ret রিটার্ন করুন
উদাহরণ (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