मान लीजिए हमारे पास n तत्वों का एक ऐरे है। दी गई ऐरे के सभी तत्वों को कुछ न्यूनतम मान x पर अपडेट करें, जैसे कि arr[i] = x। जैसे कि नए ऐरे में सभी तत्वों का गुणनफल प्रारंभिक ऐरे के सभी तत्वों के गुणनफल से सख्ती से अधिक हो, जहां i <= arr[i] <= 10^10, और 1 <= n <= 10^5। तो यदि ऐरे [4, 2, 1, 10, 6] जैसा है। तो 4 सबसे छोटा तत्व है। 4 * 4 * 4 * 4 * 4 > 4 * 2 * 1 * 10 * 6
हम जानते हैं कि n तत्वों का गुणनफल P है। यदि हमें P का nवां मूल खोजना है, तो n तत्वों के लॉग के योग से n को विभाजित करके nवें मूल को खोजें और फिर एंटीलॉग की सीलिंग परिणाम होगी।
res = ceil(antilog(log(x) / 10))
या res = ceil(10 ^ (log(x) / 10))
उदाहरण
#include <iostream>
#include <cmath>
#define EPS 1e-15
using namespace std;
long long findMinValue(long long arr[], long long n) {
long double sum = 0;
for (int i = 0; i < n; i++)
sum += (long double)log10(arr[i]) + EPS;
long double xl = (long double)(sum / n + EPS);
long double res = pow((long double)10.0, (long double)xl) + EPS;
return (long long)ceil(res + EPS);
}
int main() {
long long arr[] = {4, 2, 1, 10, 6};
long long n = sizeof(arr) / sizeof(arr[0]);
cout << "Min value is: " << findMinValue(arr, n);
}
आउटपुट
Min value is: 4