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 }

 

posted @ 2012-02-24 22:05  笑巧  阅读(461)  评论(0编辑  收藏  举报