有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盏是灭的