만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

빙글빙글 돌아가는 루프

시간 제한1초메모리 제한1024 MB

요약
32비트 정수 W와 S를 골라 시작값 W, 증가값 S인 반복문이 끝나지 않게 합니다. R2에서는 새 최솟값이 출력되는 횟수를 최대로 늘립니다.
난이도

보통10점 중 7점

유형
정수론, 수학, 시뮬레이션
정답자
아직 제출이 없습니다

문제

지난달 드렉스터가 역대 최고의 무한 루프를 만들었다. 그런데 여동생 디디가 드렉스터의 컴퓨터로 페이스북을 확인하는 동안, 프로그램에서 숫자 두 개를 지워 버렸다.

다음은 손상된 Java 프로그램이다.

public class R {

  static boolean magic(int x) {
    int foo = 0;
    while (x > 1)
      for (int y=2; ; ++y) {
        if (y==x) return foo≤0;
        if (magic(y) && x%y==0) { x/=y; ++foo; break; }
      }
    return true;
  }

  public static void main(String[] argv) {
    int where = ??????;
    int step = ??????;
    int best = where;
    while (step != 0) {
      where += step;
      if (where < best) { best=where; System.out.println("*"); }
      if (!magic(where)) break;
    }
  }
}

두 개의 "??????" 자리를 정수 W와 S로 채워야 한다. 두 값은 부호 있는 32비트 정수 범위 안에 있어야 한다. 즉 −231≤W,S≤231−1-2^{31} \le W, S \le 2^{31} - 1을 만족해야 한다.

쉬운 데이터 셋 R1에서는 where를 W로, step을 S로 초기화했을 때 프로그램이 무한 루프에 빠지도록 하는 정수 W와 S를 아무거나 하나 제출하면 된다.

어려운 데이터 셋 R2에서는 R1의 조건을 만족하는 (W, S) 쌍 가운데 프로그램이 출력하는 별표(*)의 개수가 최대가 되는 쌍을 제출해야 한다. 조건을 만족하는 쌍이 여럿이면 그중 어느 쌍을 제출해도 인정된다.

입력

편의를 위해 입력 파일에는 같은 프로그램이 여러 언어로 들어 있다. 파일은 r.java, r.py, r.cpp이며, 모두 동일하게 동작한다.

출력

한 줄에 공백으로 구분한 정수 두 개, W와 S를 출력한다.

예제1

  1. 예제 1

    입력
    
    
    예상 출력
    1073741827 -1073741824