2016-10-01 2 views
-3
public class LargestPrimeFactor { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int cases = scan.nextInt(); 
    int num = 0, temp = 0; 
     while(cases!=0) { 
     num = scan.nextInt(); 
     for(int i=2; i<=num; i++) 
      if(num%i==0) { 
       if(isPrime(i)) { 
        if(temp<i) 
         temp = i; //to always have the largest factor 
       } 
       num/=i; // to reduce the iterations for a large number. 
      } 
     System.out.println(temp); 
     cases--; 
    } 
} 

public static boolean isPrime(int num) { 
    if (num > 2 && num%2 == 0) 
     return false; 
    int top = (int)Math.sqrt(num) + 1; 
    for(int i = 3; i < top; i+=2) 
     if(num % i == 0) 
      return false; 
    return true; 
} 
} 

이 코드는 숫자의 가장 큰 소수 요소를 계산합니다. 온라인 판사로부터 5/6 회 오류가 발생합니다. 나는 예외 나 오류를 알아낼 수 없다. 도와주세요 ...내 최대 소수 프로그램의 오류는 무엇입니까?

+0

를 시도? – Carcigenicate

+0

입력을 보았습니까? –

+0

@Carcigenicate 입력 및 출력을 표시하지 않습니다. 그냥 찍은 시간 –

답변

1

각 경우에 대해 온도를 0으로 재설정해야합니다. 예 입력 :

2 7 4 

예상 출력 :

7 
7 

가 호프가

7 
2 

실제 출력.

이러한 오류는 필요 이상으로 변수를 선언 할 때 더 쉽게 나타납니다. 대신

int num = 0, temp = 0; 
    while(cases!=0) { 
    num = scan.nextInt(); 

의 당신이 제공하는 출력 봤어

while (cases != 0) { 
    int num = scan.nextInt(); 
    int temp = 0; 
+0

그게 문제라고 생각합니다. 감사합니다 ... 하지만 물어보고 싶은 두 가지가 있습니다 : 1.) 나는 마지막 사례에서 ** 런타임 오류 **를 얻고 있습니다. 어떤 아이디어? 2.) 루프 내에서 변수를 선언하면 내 프로그램이 더 많은 공간을 차지하지 않을까요? –

+0

1) 아니, 정말로, 미안. 온라인 판사가 마지막으로 한 사건입니까? 2) 확실히 아닙니다. 컴파일러는 두 경우 모두 똑같은 방법으로 공간을 사용할 수있을만큼 똑똑하고, 그렇지 않은 경우에도 * * 더 이상 사용하지 않습니다. 그리고 그렇게한다면 걱정하지 않아도됩니다. 공간은 너무 쌉니다. –

+0

불법 입력시 프로그램에서해야 할 사항이 있습니까? 그렇다면 온라인 판사를 쓴다면 분명히 시도해 볼 것입니다. 이것이 런타임 오류에 대한 설명일까요? (그냥 시도한 -1 건, 프로그램은 무한 루프에서 실행됩니다.) –