題目出自杭電
題目大意:
先把這些燈標上號,1 2 3 4 5 6 7 8 ……無窮
首先全是關的,也就是全是0
第一次操作 ,標號是1的倍數,全都變成相反的狀態,也就是全變成1..
第二次操作 ,標號是2的倍數,全都變成相反的狀態,你可以看下,2 4 6……變成了0..
第三次操作 ,標號是3的倍數,全都變成相反的狀態,你可以看下,3 6 9……
問:N 號檯燈最後 變成了 什麼狀態,
分析:
1.例如 1號燈,最後變成了1,不管多少次操作都是1..
例如 5號燈 最後變成了0,不管多少次操作都是0..
所以當操作次數大於N的時候 N的狀態就不會改變了,因爲N不會是M(M>N)的倍數.
2.一開始燈都是滅的,所以按得次數是奇數時燈亮(1),按得次數是偶數時燈滅(0)。
3.一盞燈被按次數等於它的編號的約數。即,編號約數是奇數時燈亮,偶數時燈滅。又因爲,完全平方數有奇數個約數。
所以問題轉化爲求有多少個約數的問題
#include <stdio.h>
#include<math.h>
int a,n,i,j;
int yue(int n)
{
int cnt=2;
int sq = floor( sqrt(n * 1.0) + 0.5 ) ; // 0.5 爲修正浮點數誤差,floor()爲捨去小數點後的部分進行取整
for(i=2;i<sq;i++)
{
if(n%i==0)
cnt+=2;
}
if(sq *sq == n) --cnt;
return cnt;
}
int main()
{
while(~scanf("%d",&a))
{
i=yue(a);
if(i%2==0)
printf("0\n");
else printf("1\n");
}
return 0;
}