题解 | #珂朵莉的数论题#

数学题

https://ac.nowcoder.com/acm/contest/26656/1019

// 与 1 互质的数有: 1
//    2          : 1
//    3          :  1  2
//    4          :  1  3
//    5          :  1  2  3  4
//    6          :  1  5
//    7          :  1  2  3  4  5  6  
//    8          :  1  3  5  7
//    9          :  1  2  4  5  7  8
//    20         :  1  3  7  9  11 13  17  19
//    50         :  1  3  7  9  11 13  17  19 21 23 27 29 31 33 37 39 41 43 47 49
//    惊奇的发现:与 n 互质的数的和为 phi(n)*n/2,(n>1),当 n = 1 时取1;
//    所以ans = (n+1)*n/2 - n * phi(n)/2;

#include<iostream>
#define int long long 
using namespace std;
const int p=1e9+7;
int phi(int x)
{
    int res=x;
    for(int i=2;i<=x/i;i++)
    {
        if(x%i==0)
        {
            res = res / i * (i-1);
            while(x%i==0) x/=i;
        }
    }
    if(x>1)res = res / x * (x-1);
    return res;
}

signed main()
{
    int n,ans,t;
    while(cin>>n)
    {
        ans =0;
        if(n==1)
        {
            cout<<0<<endl;
            continue;
        }
        t=phi(n);
        if(n%2==0)
        {
            ans = (n/2%p * ((n+1)%p))%p;
            ans %= p;
            ans -= ((n/2)%p * (t%p))%p;
            ans = (ans % p + p) % p;
        }
        else 
        {
            ans = (n%p * ((n+1)/2%p))%p;
            ans %= p;
            ans -= (n%p * (t/2%p))%p;
            ans = (ans % p + p) % p;
        }
        cout<<ans<<endl;
    }
}
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务