UVa——10110 - Light, more light(数论)
题意:在他走第 i 次的时候,只按动可以被 i 整除的位置(位置编号为 1 到 n )上的开关。判断最后一个灯泡的最终状态。
解题思路:令d(n) 为自然数 n 的因子个数,不及重复的因子。当且仅当 n 为完全平方数时,d(n) 为奇数;这是因为 n 的因子是成对出现的,也即当 n=a*b 且 a!=b 时,必有两个因子 a 、b;只有 n 为完全平方数,也即当 n=a2时,才会出现 d(n) 为奇数的情形。
注意:n 的范围:n<=232-1,n 必须定义为 unsigned int 型。
View Code
1 #include<iostream>
2 #include<cmath>
3 using namespace std;
4 int main()
5 {
6 unsigned int n;
7 while(cin>>n&&n)
8 {
9 double k;
10 k=sqrt(double(n));
11 if(k-(int)k==0) cout<<"yes"<<endl;
12 else cout<<"no"<<endl;
13 }
14 return 0;
15 }
2 #include<cmath>
3 using namespace std;
4 int main()
5 {
6 unsigned int n;
7 while(cin>>n&&n)
8 {
9 double k;
10 k=sqrt(double(n));
11 if(k-(int)k==0) cout<<"yes"<<endl;
12 else cout<<"no"<<endl;
13 }
14 return 0;
15 }