Problem:
Sliding GCD

Problem Statement

自然数の集合 S に対して，集合 \{ GCD(T) | T ⊆ S, T は空でない \} の要素数を f(S) とおく．

ここで，GCD(T) は T に含まれるすべての数を割り切るような最大の整数である．

特に，T が一つの整数 a のみからなるときは GCD(\{a\}) = a であることに注意せよ．

i = 1, 2, . . ., N - W+1 に対して f(\{i, i+1, . . ., i+W - 1\}) を求めよ．

Input

入力は以下の形式に従う．与えられる数は全て整数である．

N W

Constraints

1 ≦ W ≦ N ≦ 10^5

Output

i = 1, 2, . . ., N-W+1 のときの f(\{i, i+1, . . ., i+W-1\}) の値を半角スペース区切りで 1 行に出力せよ．

Sample Input 1

10 2

Output for the Sample Input 1

2 3 3 3 3 3 3 3 3

GCD(\{1\}) = 1, GCD(\{2\}) = 2, GCD(\{1,2\}) = 1 となるから f(\{1,2\}) = 2 である．

Sample Input 2

30 7

Output for the Sample Input 2

7 8 9 10 10 11 11 11 11 12 11 12 10 12 12 11 10 12 12 12 10 11 11 13

Solution in JAVA (judge verdict: WA: Presentation Error)


import java.util.*;
import java.io.*;
import static java.util.Arrays.*;
import static java.util.Collections.*;
import static java.lang.Math.*;

public class Main {

	int INF = 1 << 28;
	//long INF = 1L << 62;
	double EPS = 1e-10;
	int n, w, cnt;
	int[] cnts;
	
	void run() {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt(); w = sc.nextInt();
		cnts = new int[2*n+10];
		cnt = 0;
		
		for(int i=1;i<=w;i++) {
			update(i, 1);
		}
		System.out.print(cnt + (n==1? "\n":" "));
		for(int i=1;i<n-w+1;i++) {
//			debug(i, cnts);
			update(i, -1);
			update(i+w, 1);
			System.out.print(cnt + (i==n-w? "\n": " "));
		}
	}
	
	void update(int x, int c) {
		cnts[1] += c==1? 2: -2;
		if(x!=1) cnts[x] += c==1? 2: -2;
		if( ( cnts[x] == 2 || cnts[x] == 3 ) && c == 1 ) cnt++;
		if( ( cnts[x] == 1 || cnts[x] == 0 ) && c == -1 ) cnt--;
		for(long j=2;j*j<=x;j++) if(x%j==0) {
			cnts[(int)j] += c;
			if( cnts[(int)j] == 2 && c == 1 ) cnt++;
			if( cnts[(int)j] == 1 && c == -1 ) cnt--;
			if( j != x/j ){
				cnts[(int)(x/j)] += c;
				if( cnts[(int)(x/j)] == 2 && c == 1 ) cnt++;
				if( cnts[(int)(x/j)] == 1 && c == -1 ) cnt--;
			}
		}
	}

	void debug(Object... os) {
		System.err.println(Arrays.deepToString(os));
	}

	public static void main(String[] args) {
		new Main().run();
	}
}