2016-08-10
UVA - 10110 Light, more light
题目大意:给 n 盏灯,走 n 趟,第 i 趟只能改变能够整除 i 的灯的状态,问 n 趟后第 n 盏灯是否是亮的。
解题思路:只要考虑第 n 盏灯的改变就行,被改变的次数就是它的因子的个数,因为一开始灯是关闭的,所以一共要改变奇数次才能最终亮起来,即题意为:求一个数的因子是否是奇数个。因子都是成对出现的,既然要奇数个说明有一对因子相等,只算一次.
注意:对于完全平方数以外的数字的因数都是成对的,所以化为判断这个数是否是完全平方数即可。int 太小会 WA。要用long long。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
long long N;
while ( scanf("%lld", &N) && N ) {
long long t = sqrt(N);
if ( t * t == N )
cout << "yes" << endl;
else
cout << "no" << endl;
}
return 0;
}