Sigma Function LightOJ - 1336
考察:约数+奇偶性or打表
错误思路:
本蒟蒻打表打的是1~n的约数和,结果啥都没发现= =
正确思路:
首先要想到求约数和的公式,我们要求约数和为偶数,这时要想到奇偶讨论.显然只有奇数*奇数=奇数,其他都为偶数,为了方便讨论,直接看奇数.只有这些因子全为奇数最后的约数和才可能等于奇数.根据质数知识,除了2以外质数全为奇数,所以只要质因数的最大指数为偶数,这样质因数的累加和就是偶数,再+1为奇数.2的指数无论为什么都是奇数.
接下来分情况讨论:
- n不含2为因子,根据算数基本定理,n = p1^a1*p2^a2...*pn^an.已知a全为偶数,则n为完全平方数
- n含2为因子,且2的最大指数是偶数.同上
- 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个月啥都忘了(),指数是偶数没点反应,这道题本蒟蒻又没做出来(.)