এই সমস্যায়, আমাদের একটি নম্বর দেওয়া হয়। আমাদের কাজ হল প্রদত্ত সংখ্যাটি প্রথম n প্রাকৃতিক সংখ্যার যোগফল কিনা তা খুঁজে বের করা।
সমস্যা বর্ণনা: এখানে, আমাদের পরীক্ষা করতে হবে যে প্রদত্ত সংখ্যাটি প্রথম n স্বাভাবিক সংখ্যার যোগফল।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট: সংখ্যা =55
আউটপুট: হ্যাঁ, 10
ব্যাখ্যা:
55 হল প্রথম 10টি স্বাভাবিক সংখ্যার সমষ্টি, 1+2+3+4+5+6+7+8+9+10।
সমাধান পদ্ধতি:
সমস্যা সমাধানের একটি সহজ পদ্ধতি হল n প্রাকৃতিক সংখ্যার যোগফল খুঁজে বের করা যতক্ষণ না এটি সংখ্যার সমান বা বড় হয়।
যোগফল সংখ্যার সমান হলে, n ফেরত দিন।
যদি n-এর যেকোন মানের যোগফল n-এর থেকে বড় হয়, তাহলে -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,
এর মান বের করতে হবেতাই n বের করার জন্য আমাদের একটি দ্বিঘাত সমীকরণ তৈরি করতে হবে।
=> 2*সমষ্টি =n 2 + n
=> n 2 + n - 2*sum =0 , দ্বিঘাত সমীকরণ
এই দ্বিঘাত সমীকরণের সমাধান হল,
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#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