HDU 2053 开灯问题

来源:互联网 发布:解除防沉迷软件 编辑:程序博客网 时间:2024/06/05 11:11

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053

题解:可暴力解决,只不过耗时,后来想了想,其实跟约数个数有关,偶数个的就是0,奇数个的就是1,所以思路就是从1到n遍历,统计整除的个数。还有一种比较牛逼的做法,判断是不是完全平方数,因为完全平方数的约数个数为奇数,主要是约数个数必然成对出现,但是完全平方数算的时候就只算 一个跟。

暴力代码:

#include<iostream>using namespace std;const int max = 100000 + 5;int init[max];int main() {int n;while (cin >> n) {memset(init, 0, sizeof(init));for (int i = 1;i <= n;i++)for (int j = i;j <= n;j += i)init[j] = !init[j];cout << init[n] << endl;}}

利用因子个数代码:

#include<iostream>using namespace std;const int max = 100000 + 5;int main() {int n;while (cin >> n) {int sum = 0;for (int i = 1;i <= n;i++)if (n%i == 0)sum++;cout << sum%2 << endl;}}
牛逼代码:

#include<iostream>#include<cmath>using namespace std;int main() {int n;while (cin >> n) {int num = sqrt(n);if (num*num == n)cout << 1 << endl;elsecout << 0 << endl;}}



0 0