よくわからんが
メソッドが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; LinkedListlist = 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); } }
これでコンパイルできた。動くかどうか知らんけど。