Sigma Function LightOJ - 1336

原题链接

考察:约数+奇偶性or打表

错误思路:

       本蒟蒻打表打的是1~n的约数和,结果啥都没发现= =

正确思路:

       首先要想到求约数和的公式,我们要求约数和为偶数,这时要想到奇偶讨论.显然只有奇数*奇数=奇数,其他都为偶数,为了方便讨论,直接看奇数.只有这些因子全为奇数最后的约数和才可能等于奇数.根据质数知识,除了2以外质数全为奇数,所以只要质因数的最大指数为偶数,这样质因数的累加和就是偶数,再+1为奇数.2的指数无论为什么都是奇数.

接下来分情况讨论:

  1. n不含2为因子,根据算数基本定理,n = p1^a1*p2^a2...*pn^an.已知a全为偶数,则n为完全平方数
  2. n含2为因子,且2的最大指数是偶数.同上
  3. n含2为因子,且2的最大指数是奇数.n可变为2*(x)^2

总结n的约数和为偶数时,n==(x)^2或n==2*(x)^2.

再计算1~n有几个符合如此性质的数即可.

 

如果打表的话,我觉得首先要想到约数和的公式,否则不会往打约数和偶数的方向想= =

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cmath>
 5 using namespace std;
 6 typedef long long ll;
 7 int main()
 8 {
 9     int T,kcase = 0;
10     scanf("%d",&T);
11     while(T--)
12     {
13         ll n;
14         scanf("%lld",&n);
15         ll ans1 = sqrt(n),ans2 = sqrt(n/2);
16         n = n-ans1-ans2;
17         printf("Case %d: %lld\n",++kcase,n); 
18     }
19     return 0;
20 }

 

 

2021.6.3 二刷

绝了,时隔4个月啥都忘了(),指数是偶数没点反应,这道题本蒟蒻又没做出来(.)

 

posted @ 2021-01-26 00:33  acmloser  阅读(64)  评论(0编辑  收藏  举报