সমস্যা বিবরণ
একটি ধনাত্মক পূর্ণসংখ্যা N দেওয়া থাকলে, সেটিকে последователь ধনাত্মক পূর্ণসংখ্যার যোগফল হিসেবে কতভাবে প্রকাশ করা যায় তা বের করতে হবে।
উদাহরণ
N = 10 → আউটপুট = 3 (১০ = ১০, ১+২+৩+৪, ৫+৫? — আসলে ১০ = ১০, ১+২+৩+৪, এবং ৫+৫ নয়, বরং ১০ = ১০, ১+২+৩+৪, আরেকটি ভুল উদাহরণ দিয়ে হয়েছে। সঠিক: ১০ = ১০, ১+২+৩+৪, আরেকটি?) — কোড অনুযায়ী আউটপুট ২।
সমাধান পদ্ধতি
- গাণিতিক সূত্র: N = k*a + k(k-1)/2, যেখানে k = টার্ম সংখ্যা, a = শুরুতে সংখ্যা।
- a = (N - k(k+1)/2) / k পূর্ণসংখ্যা হলে ভ্যালিড।
- k = 2 থেকে sqrt(2N) পর্যন্ত চেক করা হয়।
- বেস কেস: N নিজে (k=1) সবসময় ভ্যালিড।
C++ বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int consecutiveNumbersSum(int N) {
int ret = 1; // k=1 (N নিজে)
for (int i = 2; ; i++) {
int sum = (i * (i + 1)) / 2;
if (sum > N) break;
int rem = N - sum;
ret += (rem % i == 0);
}
return ret;
}
};
int main() {
Solution ob;
cout << ob.consecutiveNumbersSum(10);
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: 10
আউটপুট: 2