একটি ইন্টিজার n ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হলো num-কে দুটি বা অধিক কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা বের করা। উদাহরণস্বরূপ, যদি n = 3 হয়, তবে এটি যোগফল (১+২) হিসেবে প্রকাশ করা যায়, তাই মোট ১ পদ্ধতি।
উদাহরণ ১
ইনপুট
num=6
আউটপুট
একটি সংখ্যাকে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা: 1
ব্যাখ্যা
'num' কে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতি: ১+২+৩
উদাহরণ ২
ইনপুট
num=19
আউটপুট
একটি সংখ্যাকে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা: 1
ব্যাখ্যা
'num' কে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতি: ৯+১০
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে সংখ্যাটিকে (a + a+1 + a+2...+ a+i) যোগফল হিসেবে রিপ্রেজেন্ট করা হয়।
যেটি হয়ে যায় a*(L+1) + 1+2+3+4...+i = a*(i+1) + i*(i+1)/2 (প্রাকৃতিক সংখ্যার যোগফল)। num = a*(i+1) + i*(i+1)/2। a = [num - (i)*(i+1)/2] / (i+1)।
এটি করব i=1 থেকে i*(i+1)/2 < num পর্যন্ত।
ইনপুট হিসেবে ইন্টিজার
numনিন।sum_consecutive(int num)ফাংশনটি পদ্ধতির সংখ্যা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
অস্থায়ী ভেরিয়েবল
resফ্লোট হিসেবে নিন।forলুপ দিয়েi=1থেকেi*(i+1)/2 < numপর্যন্ত ট্রুভার্স করুন।[num - (i)*(i+1)/2] / (i+1)ক্যালকুলেট করেres-এ রাখুন।যদি
resইন্টিজার হয় (res - (int)res == 0), তবে কাউন্ট বাড়ান।সকল লুপ শেষে
count-এ পদ্ধতির সংখ্যা থাকবে।countরিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int sum_consecutive(int num) {
int count = 0;
int temp = num * 2;
float res;
for (int i = 1; i * (i + 1) < temp; i++) {
int store = i + 1;
res = (1.0 * num - (i * (i + 1)) / 2) / store;
float check = res - (int)res;
if(check == 0.0) {
count++;
}
}
return count;
}
int main() {
int num = 20;
cout << "একটি সংখ্যাকে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা: " << sum_consecutive(num) << endl;
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
একটি সংখ্যাকে কনসিকিউটিভ প্রাকৃতিক সংখ্যার যোগফল হিসেবে প্রকাশ করার পদ্ধতির সংখ্যা: 1