有100盏灯,从1~100编上号,开始时所有的灯都是关着的,第一次,把所有编号是1的倍数的灯的开关状态改变一次;第二次,把所有编号是2的倍数的灯的开关状态改变一次;第三次,把所有编号是3的倍数的灯的开关状态改变一次;以此类推,直到把所有编号是100得倍数的灯的开关状态改变一次。问,此时所有开着的灯的编号

package com.yenange.t2;

public class Light {
    public static void main(String[] args) {
//        有100盏灯,从1~100编上号,开始时所有的灯都是关着的,
//        第一次,把所有编号是1的倍数的灯的开关状态改变一次;
//        第二次,把所有编号是2的倍数的灯的开关状态改变一次;
//        第三次,把所有编号是3的倍数的灯的开关状态改变一次;
//        以此类推,直到把所有编号是100得倍数的灯的开关状态改变一次。问,此时所有开着的灯的编号。
       int[] arr=new int[101];
        for (int i = 1; i < arr.length; i++) {
            arr[i]=0;    //关闭所有的灯
       }
        for (int i = 1; i < arr.length; i++) {
            for (int j = 1; j < arr.length; j++) {
                if (j%i==0) {
                    arr[j]=arr[j]==0?1:0;
                }
            }
        }
        for (int i = 1; i < arr.length; i++) {
            if (arr[i]==1) {
                System.out.print(i+"/t");
            }
        }
    }

}

10盏是亮的,分别是1 4 9 16 25 36 49 64 81 100;90盏是灭的。
这是因为除了这些平方数以外,其余的任意一个数都能分成不同的两数乘积,质数可以分为1和本身,
合数都可以分成若干组乘积(每组两个),因此,这些等都被拉了偶数倍,也就是灭的,平方数因为在被自己的开方数拉是只有一次,
所以是奇数次,也就是亮的。随便举两个例子以证明。36分别被1、2、3、4、6、9、12、18、36拉过,共是9次,亮。
38分别被1、2、19、38拉过,共是4次,灭。所以10盏是亮的;90盏是灭的

http://blog.csdn.net/yenange/article/details/5944049