hdu 3501 Calculation 2

来源:互联网 发布:郭靖 知乎 编辑:程序博客网 时间:2024/06/02 16:51

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3501

题目大意:求n的因子和。

题目分析:欧拉函数,小于n与n互质的数和n*phi[n]/2;

代码参考:

#include<cstdio>typedef long long LL;const int MOD = 1000000007;LL Euler(LL n)//欧拉函数{    LL ans = 1;//ans=(p-1)*p^(k-1)=p^k-p^k-1    for(int i=2; i*i<=n; ++i)    {        if(n%i == 0)        {            ans *= i - 1;            n /= i;            while(n%i == 0)            {                n /= i;                ans *= i;            }        }    }    if(n > 1) ans *= n - 1;//防止n是质数    return ans;}int main(){    LL n;    while(~scanf("%I64d", &n) && n)    {        LL sum = n*(n-1)/2;//总数        sum -= Euler(n)*n/2;//小于n与n互质的数和n*phi[n]/2;        printf("%I64d\n", (sum % MOD + MOD) % MOD);    }    return 0;}





0 0