তিনটি ইন্টিজার M1, M2, N দেওয়া আছে। N-এর চেয়ে ছোট সংখ্যাগুলোর মধ্যে যেগুলো M1 বা M2-এর মাল্টিপল, তাদের যোগফল বের করতে হবে।
ইনপুট
N = 13, M1 = 4, M2 = 6
আউটপুট
20
ব্যাখ্যা — ৪, ৬, ৮, ১২ (N=13-এর নিচে ৪ ও ৬-এর মাল্টিপল)। যোগফল = ২০।
সিম্পল পদ্ধতি (O(N))
int calcMulSum(int N, int M1, int M2){
int sum = 0;
for(int i=0; i
অপ্টিমাইজড পদ্ধতি (O(1)) — গাণিতিক সূত্র
সিরিজের যোগফল সূত্র ব্যবহার: `Sum = (M1-এর মাল্টিপলগুলোর যোগফল) + (M2-এর) - (LCM(M1,M2)-এর)`।
Sum(X) = (n * (n+1) * X) / 2, where n = N/X
উদাহরণ কোড (অপ্টিমাইজড)
#include <iostream>
using namespace std;
int calcMulSum(int N, int M1, int M2){
N--;
return ((N/M1)*(1+N/M1)*M1/2) + ((N/M2)*(1+N/M2)*M2/2) - ((N/(M1*M2))*(1+N/(M1*M2))*(M1*M2)/2);
}
int main(){
int N = 24, M1 = 4, M2 = 7;
cout << "Sum: " << calcMulSum(N, M1, M2);
return 0;
}
আউটপুট
The sum of multiples of 4 and 7 below 24 is 102