LightOJ 1336(Sigma Function)

Sigma Function

Sigma function is an interesting function in Number Theory. It is denoted by the Greek letter Sigma (σ). This function actually denotes the sum of all divisors of a number. For example σ(24) = 1+2+3+4+6+8+12+24=60. Sigma of small numbers is easy to find but for large numbers it is very difficult to find in a straight forward way. But mathematicians have discovered a formula to find sigma. If the prime power decomposition of an integer is

 

Then we can write,

 

For some n the value of σ(n) is odd and for others it is even. Given a value n, you will have to find how many integers from 1 to n have even value of σ.


Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case starts with a line containing an integer n (1 ≤ n ≤ 1012).

Output

For each case, print the case number and the result.

Sample Input

4

3

10

100

1000

Sample Output

Case 1: 1

Case 2: 5

Case 3: 83

Case 4: 947

 

题意:函数σ(n)等于n的所有因数之和,问满足σ(k)为偶数的k(1<=k<=n)有多少个。

分析:题目给出求σ(n)的公式σ(n)=((p1^(e1+1)-1)/(p2-1))*((p2^(e2+1)-1)/(p2-1))*......*((pk^(ek+1)-1)/(pk-1)),

又根据等比数列公式(p^(e+1)-1)/(p-1)=1+p^1+p^2+......+p^e,

我们可以先求σ(k)为奇数的个数ans再用n减去ans便是σ(k)为偶数的个数:

σ(n)为奇数时,(p^(e+1)-1)/(p-1)=1+p^1+p^2+......+p^e 必为奇数,

(1) 当p为偶数的时候,因为既是偶数又是素数的只有2,故p=2,

此时(p^(e+1)-1)/(p-1)=2^(e+1)-1必为奇数;

(2)当p为奇数时,p^k必为奇数,要使(p^(e+1)-1)/(p-1)=1+p^1+p^2+......+p^e为奇数,

e+1必为奇数,则e必为偶数;

因此,只有p1,p2,......pk满足(1)或(2)的时候σ(k)为奇数。

由算术基本定理知,n=p1^e1 * p2^e2 * ...... * pk^ek

1.当n满足条件(2)时,因为ei为偶数,所以n必为完全平方数,而且可以证明完全平方数n的σ(n)必为奇数;

2.当n满足条件(1)时,n=2^t * p1^e1 * p2^e2 * ...... * pk^ek ,若t为偶数则它n就是完全平方数,即上面的1,

若t为奇数则n=2*X (X为完全平方数)。

因此,只要排除掉n以内的所有完全平方数X和2*X,就可以得到σ(k)为偶数的个数。

 

#include<cstdio>
#include<cmath>
int main()
{
    int T,cas=0;
    long long N,ans;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&N);
        ans=(long long)sqrt(N)+(long long)sqrt(N/2.0);
        printf("Case %d: %lld\n",++cas,N-ans);
    }
    return 0;
}
View Code

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ACRykl/p/8613381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sigma函数是指一个数字的所有因子之和。给定一个数字n,需要求出有多少个数字Sigma函数是偶数。\[2\] 为了解决这个问题,可以先筛选出n范围内的素数(范围在10^6即可),然后对n进行素因子分解。对于每个因子,如果它的Sigma函数中连乘的每一项都是偶数,那么整个Sigma函数就是偶数。具体实现中,可以判断每个因子的平方根是否为偶数,如果是偶数,则减去(平方根+1)/2。\[1\] 另外,还可以使用O(1)的做法来解决这个问题。根据观察,所有的完全平方数及其两倍的值都会导致Sigma函数为偶数。因此,可以直接计算n的平方根,然后减去(平方根+1)/2即可得到结果。\[3\] #### 引用[.reference_title] - *1* [Sigma Function](https://blog.csdn.net/PNAN222/article/details/50938232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【LightOJ1336Sigma Function(数论)](https://blog.csdn.net/qq_30974369/article/details/79009498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值