/* 题五:一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
int n,i = 0, j = 0, t, k = 0;
int *p = NULL;
printf("请输入灯数:");
scanf("%d", &n);
if (n < 1 || n > 65535) {
printf("输入的灯的数目无效\n");
return -1;
}
p = (int *)malloc(n * sizeof(int));
memset(p, 0, n * sizeof(int));
for (i = 1; i <= n; i++){
for (j = 1; j <= n; j++) {
t = i * j;
if (t > n)
break;
p[t - 1]++;
}
}
for(t = 0; t < n; t++) {
if(p[t] % 2 != 0) {
k++;
}
}
printf("亮着的灯数:%d\n",k);
free(p);
p = NULL;
return 0;
}