hdu 3501 Calculation 2

題目鏈接: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;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章