সমস্যা বিবরণ
একটি সংখ্যা দেওয়া থাকলে, এর ডিজিটগুলোর সম এবং গুণফল বের করুন। প্রতিটি ফলাফলকে আবার ডিজিট সম/গুণফল করে একক ডিজিটে আনার পর্যন্ত চালিয়ে যান। দুটি ফলাফলের সর্বোচ্চ মান বের করুন।
সমাধানের পদ্ধতি
ডিজিট সম (Digital Root):
- n == 0 → 0
- n % 9 == 0 → 9
- অন্যথায় n % 9
ডিজিট গুণফল (Multiplicative Digital Root):
- প্রতিটি ডিজিট গুণ করুন।
- ফলাফল > 9 হলে, তার ডিজিটগুলোর গুণফল করুন।
- একক ডিজিট হলে বন্ধ।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
long repeatedSum(long n) {
if (n == 0) return 0;
return (n % 9 == 0) ? 9 : (n % 9);
}
long repeatedProduct(long n) {
long prod = 1;
while (n > 0 || prod > 9) {
if (n == 0) {
n = prod;
prod = 1;
}
prod *= n % 10;
n /= 10;
}
return prod;
}
long maxSumProduct(long N) {
if (N < 10) return N;
return max(repeatedSum(N), repeatedProduct(N));
}
int main() {
long n = 631;
cout << maxSumProduct(n) << endl;
return 0;
}
আউটপুট
8
ব্যাখ্যা
n = 631
ডিজিট সম: 6+3+1=10 → 1+0=1 (ডিজিটাল রুট: 631%9=1)
ডিজিট গুণফল: 6×3×1=18 → 1×8=8
সর্বোচ্চ: max(1, 8) = 8
জটিলতা
- সময়: O(log n) — ডিজিট সংখ্যা অনুপাতিক
- স্থান: O(1)