একটি পূর্ণসংখ্যা N দেওয়া আছে। সিরিজ 1 - 2 + 3 - 4 + 5 - 6 + 7 ... এর প্রথম N টার্মের যোগফল বের করতে হবে।
উদাহরণ
ইনপুট: N = 4 → আউটপুট: -2
ব্যাখ্যা: 1 - 2 + 3 - 4 = -2
প্যাটার্ন আবিষ্কার
কয়েকটি মান দিয়ে চেক করলে প্যাটার্ন দেখা যায়:
- sum(1) = 1
- sum(2) = -1
- sum(3) = 2
- sum(4) = -2
- sum(5) = 3
- sum(6) = -3
- sum(7) = 4
- sum(8) = -4
সূত্র
- যদি
Nবিজোড়: Sum = (N + 1) / 2 - যদি
Nজোড়: Sum = -N / 2
এটি O(1) টাইমে সমাধান হয়, কোনো লুপ লাগে না।
C++ প্রোগ্রাম
#include <iostream>
using namespace std;
int calcSumNTerms(int n) {
if (n % 2 == 0)
return (-1) * (n / 2);
return (n + 1) / 2;
}
int main() {
int n = 156;
cout << "The sum of series upto n terms is " << calcSumNTerms(n);
return 0;
}
আউটপুট
The sum of series upto n terms is -78
ব্যাখ্যা
N = 156(জোড়) →-156/2 = -78।- ফর্মুলা ব্যবহার করে কোনো লুপ ছাড়া চুৎকি সমাধান।
- বড়
N(যেমন ১০^৯) এর জন্যও এটিই দ্রুত।
বিকল্প: লুপ দিয়ে সমাধান (O(N))
int sum = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 == 1) sum += i;
else sum -= i;
}
এটি বুঝতে সহজ কিন্তু বড় N-এ ধীর।