2012-09-24 15 views
6

की प्राइम फैक्टोरिज़ेशन प्रदर्शित करें तो मेरे असाइनमेंट के लिए, मुझे एक प्रोग्राम लिखना है जो उपयोगकर्ता को पूर्णांक इनपुट के लिए पूछता है और फिर उस नंबर के प्रमुख कारक को प्रिंट करता है। यह वह जगह है कि मैं क्या है:जावा

import java.util.Scanner; 

public class PrimeFactor { 
    public static void main(String[] args) { 
     System.out.print("Enter a positive number: "); 
     Scanner scanner = new Scanner (System.in); 
     int number = scanner.nextInt(); 
     int count; 
     for (int i = 2; i<=(number); i++) { 
      count = 0; 
      while (number % i == 0) { 
       number /= i; 
       count++; 
       if (count == 0) { 
        continue; 
       } 
      } 
      System.out.println(i+ "**" + count); 
     } 
    } 
} 
समस्या मेरे पास है

अभी कि जब भी मैं इसे पसंद के साथ, संख्या 15,453, चलाने के लिए, मैंने 100 1 से हर पहलू की एक सूची प्राप्त और उसके प्रतिपादक है जब मैं केवल प्रमुख कारक चाहते हैं, और मैं आगे बढ़ने के लिए अटक गया हूं।

+0

क्या आप रिकर्सन, फ़ंक्शंस, लाइब्रेरी क्लासेस का उपयोग कर सकते हैं? आपको यहां उपयोग करने की अनुमति देने के लिए बस एक हैंडल प्राप्त करने की आवश्यकता है। – thatidiotguy

+3

कि 'जारी रखें' कथन अक्सर निष्पादित नहीं किया जा रहा है ... – Keppil

उत्तर

0

आप पास कर रहे हैं:

  1. System.out.println बयान अपने count>0
  2. के लिए लूप और केवल प्रदर्शन if(count == 0) { continue; } निकालें के लिए, यह बेकार है, क्योंकि तुम सिर्फ वृद्धि के अंदर होना चाहिए count
4

आप लगभग वहां हैं! for लूप के बाहर if-continue ब्लॉक को ले जाएं। अन्यथा, यह आपके इच्छित इरादे के बजाय आंतरिक-सबसे लूप "जारी" होता है।

while (number % i == 0) { 
    number /= i; 
    count++; 
} 
if (count == 0) { 
    continue; 
} 
System.out.println(i+ "**" + count); 

वैकल्पिक रूप से, आप if (count != 0) में System.out.println कॉल लगा सकता है, क्योंकि यह केवल बयान continue निम्नलिखित है: link:

while (number % i == 0) { 
    number /= i; 
    count++; 
} 
if (count != 0) { 
    System.out.println(i+ "**" + count); 
} 

ideone पर आपका कार्यक्रम।

0

लूप के समय (गिनती == 0) {जारी;} कथन को हटाएं और उसके बाद इसे लूप में हटा दें। :)

for (int i = 2; i<=(number); i++) { 
     count = 0; 
     while (number % i == 0) { 
      number /= i; 
      count++; 
     } 
     if(count==0) continue; 
     System.out.println(i+ "**" + count); 
    } 
0

सुनिश्चित नहीं है कि आप गुणा को दो बार क्यों प्रिंट कर रहे हैं! यहां साफ़ कोड है:

public static void printPrimeNumbers(int prime) { 

    int n; 

    for (int i = 2; i <= prime; i++) { 
     n = 0; 
     while (prime % i == 0) { 
      prime /= i; 
      n++; 

     } 

     if (n != 0) { 
      for (int j = n; j > 0; j--) { 
       System.out.print(i); 

       if (prime != 1) { 
        System.out.print("*"); 
       } 
      } 
     } 
    } 
} 
0

आप नीचे दिए गए फ़ंक्शन से कुछ सहायता भी प्राप्त कर सकते हैं।

public int getPrimeNumber(double number) { 
    int j = 0; 
    while (number % 2 == 0) { 
     number = number/2; 
     j = 2; 
    } 

    for (int i = 3; i <= number; i = i + 2) { 
     while (number % i == 0) { 
      number = number/i; 
      j = i; 
     } 
    } 

    return j == 0 ? 1 : j; 
} 

यह फ़ंक्शन दिए गए नंबर का सबसे बड़ा प्रमुख कारक वापस करेगा।

0

एक बात के लिए, आपके continue जबकि लूप के अंदर है, जहां इसका कोई प्रभाव नहीं पड़ता है।कम से कम ठीक होगा

public class PrimeFactor { 
    public static void main(String[] args) { 
     System.out.print("Enter a positive number: "); 
     Scanner scanner = new Scanner (System.in); 
     int number = scanner.nextInt(); 
     int count; 
     for (int i = 2; i<=(number); i++) { 
      count = 0; 
      while (number % i == 0) { 
       number /= i; 
       count++; 
      } 
      if (count == 0) { 
       continue; 
      } 
      System.out.println(i+ "**" + count); 
     } 
    } 
} 

लेकिन आप कुछ अन्य समस्याएं हैं:

  • आपका कोड सही तरीके से "कारक" नहीं है (विडंबना यह है कि, "कारक" इस संदर्भ में इसका मतलब है कि है में टूट नहीं है कार्यों
  • चर नाम खराब
  • चुना जाता है आप (इस मामले में continue) एक गोटो का उपयोग जब एक if
पर्याप्त होगा

बेहतर कोड होगा

public class PrimeFactor { 
    public static void main(String[] args) { 
     System.out.print("Enter a positive number: "); 
     Scanner scanner = new Scanner (System.in); 
     printFactors(scanner.nextInt()); 
    } 
    public static void printFactors(int product) { 
     for (int factor = 2; factor <= product; factor++) { 
      int exponent = 0; 
      while (product % factor == 0) { 
       product /= factor; 
       exponent++; 
      } 
      if (exponent > 0) { 
       System.out.println(factor+ "**" + exponent); 
      } 
     } 
    } 
} 
1
public class _03_LargestPrimeFactor { 

public static void main(String[] args) { 

    long a = 600851475143L; 

    for(int i=2; i<(a/i); i++){       // no factors would exist beyond a/i for a particular i 

     while(a%i == 0){        // if i is a factor 
      a = a/i;         // divide a by i else we wont get a prime number 
      System.out.print(a + " x " + i + "\n"); 
     } 
    } 

    if(a > 1) 
    System.out.println("largest prime factor: " + a); 
} 

} 

कंसोल:

8462696833 एक्स 71

10086647 x 839

6857 x 1471

सबसे बड़ा प्रधानमंत्री कारक: 6857

+0

इसे विस्तार से समझाएं –