lightoj 1336 Sigma Function

题目大意:

  δ(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\n", l++, n - t1 - t2);
19     }
20     return 0;
21 }

 

posted @ 2015-04-27 12:12  罗茜  阅读(253)  评论(0编辑  收藏  举报