এই সমস্যায়, আমাদের একটি সংখ্যা num দেওয়া আছে। আমাদের কাজ হল দেওয়া সংখ্যাটি প্রথম n প্রাকৃতিক সংখ্যার যোগফল কিনা তা খুঁজে বের করা।
সমস্যা বিবরণ: এখানে আমাদের যাচাই করতে হবে দেওয়া সংখ্যাটি প্রথম n প্রাকৃতিক সংখ্যার যোগফল কিনা।
উদাহরণ দিয়ে বুঝি,
ইনপুট: num = 55
আউটপুট: হ্যাঁ, 10
ব্যাখ্যা:
৫৫ হল প্রথম ১০ প্রাকৃতিক সংখ্যার যোগফল, ১+২+৩+৪+৫+৬+৭+৮+৯+১০।
সমাধানের পদ্ধতি:
সহজ পদ্ধতিতে n প্রাকৃতিক সংখ্যার যোগফল বের করুন যতক্ষণ না সেটি num-এর সমান বা বড় হয়।
- যোগফল num-এর সমান হলে n রিটার্ন করুন।
- যদি যেকোনো n-এ যোগফল num-এর চেয়ে বড় হয়, -1 রিটার্ন করুন।
সমাধান দর্শানোর প্রোগ্রাম,
উদাহরণ
#include <iostream>
using namespace std;
int isNatSum(int num){
int sum = 0;
for (int n = 1; sum < num; n++) {
sum += n;
if (sum == num)
return n;
}
return -1;
}
int main(){
int num = 55;
int n = isNatSum(num);
if(n == -1)
cout << "The value is not sum of natural numbers";
else
cout << "The value is a sum of first " << n << " natural numbers";
return 0;
} আউটপুট
The value is a sum of first 10 natural numbers
এই পদ্ধতি ভালো হলেও আমরা গাণিতিক সূত্র ব্যবহার করে আরও দক্ষতার সাথে সমাধান করতে পারি।
প্রথম n প্রাকৃতিক সংখ্যার যোগফলের সূত্র:
যোগফল = n*(n+1)/2
আমাদের যোগফল দেওয়া আছে, n বের করতে হবে।
দ্বিঘাত সমীকরণ তৈরি করুন:
=> 2*যোগফল = n² + n
=> n² + n - 2*যোগফল = ০, দ্বিঘাত সমীকরণ
এই সমীকরণের সমাধান:
সমাধান দর্শানোর প্রোগ্রাম,
উদাহরণ
#include <iostream>
#include <math.h>
using namespace std;
int isNatSum(int num){
int n = ( -1 + sqrt(1 + (8*num)) ) / 2;
if(ceil(n) == floor(n)){
return n;
}
return -1;
}
int main(){
int num = 55;
int n = isNatSum(num);
if(n == -1)
cout << "The value is not sum of natural numbers";
else
cout << "The value is a sum of first " << n << " natural numbers";
return 0;
} আউটপুট
The value is a sum of first 10 natural numbers