2018CHD-ACM新生赛(正式赛)E.解救迷茫的草滩小王子

Description

彩虹岛上一共会举办n场纯粹的(CHD−FINAL)比赛,编号为从1∼n的正整数。小王子是一个狂热又 纯粹的ACMer,自然要参加每一场。 万万没想到,比赛规则被邪恶的彩虹岛副主席掌控了。副主席一共会修改n次比赛规则,第i 次修改规 则会导致编号为i的正整数倍的比赛性质发生反转。(比赛只有两种性质:纯粹和不纯粹,纯粹的比赛经过反 转会变成不纯粹的比赛,不纯粹的比赛经过反转会变成纯粹的比赛) 小王子很苦恼,没办法改变比赛规则的他只想参加纯粹的比赛。请你告诉他一共能参加多少场比赛。

Input

输入第一行为一个整数T(T ≤ 105),表示一共有T组测试数据。 接下来有T行,每行有1个整数为n(1 ≤ n ≤ 105),表示比赛的总数量。

Output
对于每组测试数据输出一个整数x,表示草滩小王子能参加的比赛数。

Sample Input
2 1 5

Sample Output
0 3

Hint
对于第一组样例,没有小王子能参加的纯粹的比赛。 对于第二组样例,小王子能参加的比赛编号为2,3,5。

思路:判断比赛是否纯粹,需要判断该比赛被修改奇数次还是偶数次,若为奇数次,则不纯粹,反之,纯粹。故只需判断该数的因数个数,对于完全平方数,因数个数为奇数个,所以本题为判断闭区间[1,n]中有多少完全平方数,公式为n-√n。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #define M 1000005
 7 
 8 using namespace std;
 9 int main()
10 {
11     int t;
12     cin >> t;
13     while (t--)
14     {
15         int n;
16         cin >> n;
17         cout << n - (int)sqrt(n) << endl;//注意数据类型的转换
18     }
19 }
————————————————
心里有光,哪儿都美
原文地址:https://www.cnblogs.com/harutomimori/p/10105880.html