有n(n>3)盏灯,放在一排,从1到n依次编号;对应有n个人,也从1到n依次编号。第1个人(1号)将全部灯关闭,第2个人(2号)将编号是2的整数倍数的灯打开,第3个人(3号)将编号是3的整数倍数的灯做相反的处理(若灯是开的,则关闭,若灯是闭的,则打开);第i个人(i>=3)将编号是i的整数倍数的灯做相反的处理。
问第n=1000个人操作后,多少盏灯是开的?
[程序]
main( )
{
int a[1001]=1,i,j,s=0;
/*1表示打开,-1表示关掉*/
for(i=1;i<=1000;i++)
for(j=i;j<=1000;j+=i)
a[j]=-a[j];
for(i=1;i<=1000;i++)
if(a[i]==1) s++;
printf("%d",s);
}