よくわからんが

メソッドが64kbまでしか動かないらしい。大体1024までで60kbになってしまうことから考えて、書き直してみた。

import java.util.*;
class Main{
	public static void main(String  argv){
		System.out.println("class Main{");
		System.out.println("\tpublic static void main(String  argv){");
		System.out.println("\t\tif(argv.length == 0) return;");
		System.out.println("\t\tint n = Integer.parseInt(argv[0]);");
		System.out.println("\t\tif(n < 2 || n > 16384) return;");
		for(int j = 0; j < 16; j++){
			System.out.printf("\t\tif(1024 * %d < n && n <= 1024 * (%d + 1)){\n", j, j);
			System.out.printf("\t\t\tprint%d(n);\n", j);
			System.out.println("\t\t}");
		}
		System.out.println("\t}");
		
		for(int j = 0; j < 16; j++){
			System.out.printf("\tstatic void print%d(int n){\n", j);
			System.out.println("\t\tswitch(n){");
			for(int i = j*1024+1; i <= (j+1) * 1024; i++){
				if(i == 1) continue;
				System.out.println("\t\t\tcase " + i + ":\n");
				System.out.print("\t\t\t\tSystem.out.println(\"");
				printFactor(i);
				System.out.println("\");break;");
			}
			System.out.println("\t\t}");
			System.out.println("\t}");
		}
		System.out.println("}");
	}
	public static void printFactor(int n){
		int num = n;
		LinkedList list = new LinkedList();
		int i = 2;
		while(i < n){
			while(n % i == 0){
				n /= i;
				list.add(i);
			}
			i++;
		}
		if(n != 1){
			list.add(n);
		}
		String str = "";
		for(Integer k:list){
			if(str.equals("")){
				str = str + k;
			}else{
				str = str + " * " + k;
			}
		}
		System.out.print(str);
	}
	
}

これでコンパイルできた。動くかどうか知らんけど。