उदाहरण
import java.util.*;
import java.lang.*;
public class Demo {
public static int remainder(int myArr[], int arrLen, int val) {
int mulVal = 1;
for (int i = 0; i < arrLen; i++)
mulVal = (mulVal * (myArr[i] % val)) % val;
return mulVal % val;
}
public static void main(String argc[]) {
int[] myArr = new int[]{ 35, 100, 69, 99, 27, 88, 12, 25 };
int arrLen = 8;
int val = 11;
System.out.println("ऐरे को 11 से गुणा करने पर शेषफल है: ");
System.out.println(remainder(myArr, arrLen, val));
}
}
आउटपुट
ऐरे को 11 से गुणा करने पर शेषफल है 0
व्याख्या: Demo क्लास में 'remainder' नामक एक स्टेटिक फंक्शन होता है, जो एक इंटीजर ऐरे के माध्यम से पुनरावृति करता है, और जांचता है कि क्या एक विशिष्ट संख्या इंटीजर ऐरे के सभी तत्वों को पूरी तरह से विभाजित करती है, अन्यथा शेषफल मान देती है। मुख्य फंक्शन में, संख्या का मान परिभाषित किया जाता है, एक इंटीजर ऐरे परिभाषित किया जाता है, और ऐरे की लंबाई परिभाषित की जाती है। फंक्शन को इंटीजर ऐरे, ऐरे की लंबाई, और संख्या को पैरामीटर के रूप में पास करके कॉल किया जाता है। प्रासंगिक संदेश कंसोल पर प्रदर्शित होता है।
गणितीय सिद्धांत:
(a × b) mod m = ((a mod m) × (b mod m)) mod m
यह गुण हमें ओवरफ्लो से बचाता है क्योंकि हम प्रत्येक गुणन के बाद मॉड्यूलो लेते हैं।
चरण-दर-चरण गणना (उदाहरण के लिए):
ऐरे: [35, 100, 69, 99, 27, 88, 12, 25], m = 11
चरण 1: 35 % 11 = 2 → mul = (1 × 2) % 11 = 2
चरण 2: 100 % 11 = 1 → mul = (2 × 1) % 11 = 2
चरण 3: 69 % 11 = 3 → mul = (2 × 3) % 11 = 6
चरण 4: 99 % 11 = 0 → mul = (6 × 0) % 11 = 0
चरण 5-8: 0 से गुणा = 0 → अंतिम परिणाम = 0
चूंकि 99, 11 से विभाज्य है, पूरा गुणनफल 11 से विभाज्य है।
ओवरफ्लो-सुरक्षित सामान्य संस्करण:
public static long remainderLargeNumbers(long[] arr, long mod) {
long result = 1;
for (long num : arr) {
result = (result * (num % mod)) % mod;
// या Java 8+ के लिए:
// result = Math.multiplyExact(result, num % mod) % mod;
}
return result;
}
अनुप्रयोग:
-
<बड़े संख्याओं के मॉड्यूलर अंकगणित में उपयोगी/li>
- क्रिप्टोग्राफी (RSA, डिफी-हेलमैन)
- प्रतिस्पर्धात्मक प्रोग्रामिंग (बड़े ऐरे गुणनफल मॉड्यूलो)
- हैश फंक्शन गणना