HDU 2053 Switch Game(开灯问题,完全平方数)

题目链接: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 }
原文地址:https://www.cnblogs.com/fu3638/p/7507239.html