题目大意:
δ(n)表示n的所有因子的和,给一个数n,求[1,n]之间的数x,满足δ(x)是偶数的x有多少个。
解题思路:
想来想去,没有思路,只感觉和2这个因子有关,看大家都做出来了,感觉题目不应该太难,于是打标看了看,发现只有2x,x2,2*x2的因子不是偶数,只需要算出来然后减去重复的就ok:
2x/x2:可以换算出,当x是偶数的时候,两者重复。
2x/2*x2:当x是奇数的时候,两者重复。
所以最后的结果就是n减去x2和2*x2的个数。
代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 8 int main () 9 { 10 long long t, n, l = 1; 11 scanf ("%lld", &t); 12 while (t --) 13 { 14 scanf ("%lld", &n); 15 long long t1, t2; 16 t1 = (long long)sqrt(n);//x^2的个数 17 t2 = (long long)sqrt(n/2);//2*x^2的个数 18 printf ("Case %lld: %lld ", l++, n - t1 - t2); 19 } 20 return 0; 21 }