题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053
题目大意:灯开始是关着的,有n盏灯,i从1数到n每当灯的序号是i的倍数的时候就对灯进行一次操作(开->关,关->开),求最后第n盏灯是关着还是开着。
解题思路:直接对第n盏灯模拟也可以,但是有规律更好不是吗~。其实就是判断n的约束奇偶性,奇数就开着,偶数就关着。
当一个数不是完全平方数:如18约数为:(3,6),(2,19),(1,15)约数个数总会是偶数,因为每个约数都有一个对应的不同的约数。
当他是完全平方数:如36约数为:(1,36),(2,18),(3,12),(4,9),6 约数个数总是奇数,因为约数sqrt(n)对应的约数是相同的。
代码:
1 #include<cstdio> 2 #include<cmath> 3 using namespace std; 4 5 int main(){ 6 int n; 7 while(~scanf("%d",&n)){ 8 int b=sqrt(n*1.0); 9 if(b*b==n) 10 puts("1"); 11 else 12 puts("0"); 13 } 14 return 0; 15 }
HDU 2053 Switch Game(开灯问题,完全平方数)
原文:http://www.cnblogs.com/fu3638/p/7507239.html