链接: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;
}