2014-11-09 3 views
0

여기서는 코딩으로 시작하기 때문에 나와 함께하시기 바랍니다. 나는이 간단한 작업 (적어도 간단하게 보았다)을했다. "두 개의 정수를 읽은 다음 2, 3 또는 5로 나눌 수있는 모든 것을 작성합니다. 내 코드는 작은 수를 다루는 데 아무런 문제가 없습니다. 그러나 그것은 내가 수백만에 들어갈 때 단지 시간 초과.이 프로그램을 복잡하거나 계산하는 시간의 말도 안되는 금액을 소요됩니다. 감사합니다 도와주세요!큰 숫자에 대해서는 코드가 작동하지 않습니다.

import java.util.Scanner; 

class Veckratniki { 
    public static void main(String[] args) { 
     long v = 0; 
     Scanner sc = new Scanner(System.in); 
     long a = sc.nextLong(); 
     long b = sc.nextLong(); 
     while (a <= b) { 
      if ((a % 2 == 0) || (a % 3 == 0) || (a % 5 == 0)) { 
       v++; 
       a++; 
      } else { 
       a++; 
      } 
     } 
     System.out.println(v); 
    } 
} 
+0

범위가 커지면 많은 양의 물건을 출력한다는 것입니다. 실제로 모든 인쇄 작업을 수행해야하는 경우 모든 인쇄물을 인쇄하는 데 시간이 걸리기 때문에 간단히 말하면 인쇄 속도가 느려집니다. –

+0

런타임은 검색 할 범위의 크기에 비례합니다. 범위를 10 배 크게 만들고 10 배 길게 만듭니다. – Henry

답변

1

그냥이 숫자를 계산해야 할 경우 프로그램 속도를 높일 수 있습니다 극적, 즉 내포 배타 원리 일부를 이용하여 수학.

I 호출 N (X) (X)로 나눌 수 범위의 수.

,

그러면 답은 N (2) + N (3) + N (5) - N (6) - N (10) - N (15) + N (30)입니다.

N (x)를 결정하기위한 연습으로 남겨 둡니다. 힌트 : 범위/x에 가깝습니다.

관련 문제