उदाहरण
public class Demo {
public static long primeFactors(int num) {
long myProd = 1;
for (int i = 2; i <= num; i++) {
if (num % i == 0) {
boolean isPrime = true;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
myProd = myProd * i;
}
}
}
return myProd;
}
public static void main(String[] args) {
int num = 68;
System.out.println("अद्वितीय अभाज्य गुणनखंडों का गुणनफल है: ");
System.out.print(primeFactors(num));
}
}
आउटपुट
अद्वितीय अभाज्य गुणनखंडों का गुणनफल है 34
व्याख्या: Demo क्लास में 'primeFactors' नामक एक स्टेटिक फंक्शन होता है जो एक संख्या के अभाज्य गुणनखंड ढूंढता है, अद्वितीय संख्याएं ढूंढता है, और इन अभाज्य गुणनखंडों के गुणनफल को एक वेरिएबल में संग्रहीत करता है। मुख्य फंक्शन में, संख्या का मान परिभाषित किया जाता है, और इस संख्या को पैरामीटर के रूप में पास करके फंक्शन को कॉल किया जाता है। प्रासंगिक संदेश कंसोल पर प्रदर्शित होता है।
68 के लिए सत्यापन:
68 = 2 × 2 × 17 = 2² × 17
अद्वितीय अभाज्य गुणनखंड: 2, 17
गुणनफल = 2 × 17 = 34 ✓
अनुकूलित संस्करण (O(√n)):
public static long uniquePrimeProduct(int n) {
long product = 1;
// 2 को अलग से हैंडल करें
if (n % 2 == 0) {
product *= 2;
while (n % 2 == 0) n /= 2;
}
// विषम संख्याएं √n तक
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0) {
product *= i;
while (n % i == 0) n /= i;
}
}
// यदि n > 2 बचा है, तो यह अभाज्य है
if (n > 2) product *= n;
return product;
}
समय जटिलता तुलना:
| दृष्टिकोण | समय जटिलता | टिप्पणी |
|---|---|---|
| मूल (i/2 तक जांच) | O(n²) | बहुत धीमा बड़ी संख्याओं के लिए |
| √n तक जांच | O(n√n) | बेहतर |
| अनुकूलित (ऊपर) | O(√n) | सबसे तेज, n को कम करता जाता है |
| सीव प्रीकंप्यूटेशन | O(n log log n) प्रीकंप्यूट | एकाधिक क्वेरीज के लिए सर्वश्रेष्ठ |
उपयोग केस:
- संख्या सिद्धांत समस्याएं
- क्रिप्टोग्राफी (RSA में φ(n) गणना)
- अभाज्य गुणनखंडन-आधारित एल्गोरिदम