链接:LightOJ - 1336 Sigma Function
题意:
σ ( x ) \sigma(x) σ(x)表示 x x x的所有因数之和,给出 n    ( 1 ≤ n ≤ 1 0 12 ) n\;(1\le n\le10^{12}) n(1≤n≤1012),问 1 1 1 ~ n n n中有多少数的 σ \sigma σ值是偶数?
分析:
根据唯一分解定理,有 x = p 1 a 1 ? p 2 a 2 ? p k a k x=p_1^{a_1}\cdot p_2^{a_2}\cdots p_k^{a_k} x=p1a1???p2a2???pkak??
则 σ ( x ) = ( 1 + p 1 + p 1 2 + ? + p 1 a 1 ) ( 1 + p 2 + p 2 2 + ? + p 2 a 2 ) ? ( 1 + p k + p k 2 + ? + p k a k ) \sigma(x)=(1+p_1+p_1^2+\dots+p_1^{a_1})(1+p_2+p_2^2+\dots+p_2^{a_2})\cdots(1+p_k+p_k^2+\dots+p_k^{a_k}) σ(x)=(1+p1?+p12?+?+p1a1??)(1+p2?+p22?+?+p2a2??)?(1+pk?+pk2?+?+pkak??)
由于 奇数 × \times ×奇数 = = =奇数 ,    ,\; ,偶数 × \times ×奇数 = = =偶数,所以我们可以 讨论 σ ( x ) \sigma(x) σ(x)为奇数的情况,即 所有乘数均为奇数 的情况。
当 p = 2 p=2 p=2时,可以发现,无论 a a a是多少, ( 1 + p + p 2 + ? + p a ) (1+p+p^2+\dots+p^a) (1+p+p2+?+pa)都一定为奇数;
而当 p ≠ 2 p\neq2 p??=2时(则质因数 p p p一定是奇数),可以发现,仅当 a a a为偶数的时候, ( 1 + p + p 2 + ? + p a ) (1+p+p^2+\dots+p^a) (1+p+p2+?+pa)为奇数,否则为偶数。
然后,我们可以对质因数 2 2 2的指数 a a a进行讨论,若 a a a是偶数,因为其他质因数的 a a a也是偶数,所以这个数满足 k 2 k^2 k2
若 a a a是奇数,同理,因为其他质因数的 a a a是偶数,则这个数满足 2 ? k 2 2*k^2 2?k2
所以,我们只需要找到上述两种数的个数:
- n n n以内满足 k 2 k^2 k2的个数: n \sqrt n n?(因为 1 1 1 ~ n \sqrt n n?的所有数平方后都在 n n n以内)
- n n n以内满足 2 ? k 2 2*k^2 2?k2的个数: n 2 \sqrt \frac{n}{2} 2n??(因为 1 1 1 ~ n 2 \sqrt \frac{n}{2} 2n??的所有数平方后乘以 2 2 2都在 n n n以内)
则最终答案为 a n s = n ? n ? n 2 ans=n-\sqrt n-\sqrt \frac{n}{2} ans=n?n??2n??
以下代码:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int main()
{
int T,kase=0;scanf("%d",&T);while(T--){
LL n,ans;scanf("%lld",&n);ans=n-(LL)sqrt(n)-(LL)sqrt(n/2);printf("Case %d: %lld\n",++kase,ans);}return 0;
}