zoukankan      html  css  js  c++  java
  • 欧拉函数之和(51nod 1239)

    对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质。
     
    S(n) = Phi(1) + Phi(2) + ...... Phi(n),给出n,求S(n),例如:n = 5,S(n) = 1 + 1 + 2 + 2 + 4 = 10,定义Phi(1) = 1。由于结果很大,输出Mod 1000000007的结果。
    Input
    输入一个数N。(2 <= N <= 10^10)
    Output
    输出S(n) Mod 1000000007的结果。
    Input示例
    5
    Output示例
    10
    #include<cstdio>
    #include<iostream>
    #define N 2000010
    #define ha 2333333
    #define mod 1000000007
    #define ni 500000004
    #define lon unsigned long long
    using namespace std;
    int phi[N],prime[N],cnt,tot,head[N],vis[N];
    lon n,sum[N];
    struct node{int pre;lon x,v;}e[N];
    void add(int u,lon v,lon x){
        e[++cnt].v=v;e[cnt].x=x;e[cnt].pre=head[u];head[u]=cnt;
    }
    void get_prime(){
        phi[1]=1;
        for(int i=2;i<N;i++){
            if(!vis[i]) vis[i]=1,prime[++tot]=i,phi[i]=i-1;
            for(int j=1;j<=tot&&i*prime[j]<N;j++){
                vis[i*prime[j]]=1;
                phi[i*prime[j]]=phi[i]*(prime[j]-1);
                if(i%prime[j]==0){
                    phi[i*prime[j]]=phi[i]*prime[j];
                    break;
                }
            }
        }
        for(int i=1;i<N;i++) sum[i]=(sum[i-1]+phi[i])%mod;
    }
    lon solve(lon x){
        if(x<N) return sum[x];
        lon ans=0,k=x%ha,last;
        for(int i=head[k];i;i=e[i].pre)
            if(e[i].v==x) return e[i].x;
        for(lon i=2;i<=x;i=last+1){
            last=x/(x/i);
            ans=(ans+(last-i+1)%mod*solve(x/i)%mod)%mod;
        }
        ans=((x%mod*(x+1)%mod)%mod*ni%mod-ans+mod)%mod;
        add(k,x,ans);
        return ans;
    }
    int main(){
        get_prime();
        cin>>n;
        cout<<solve(n);
        return 0;
    }
  • 相关阅读:
    div显示和隐藏
    C语言求素数的算法
    日志分析概述
    Base64编码 概念和用途
    leetcode
    hdu2665-Kth number
    为什么要新加入的人不闻不问?
    实现微博@@@
    JAVA运行程序代码段
    IfSpeed 带宽计算
  • 原文地址:https://www.cnblogs.com/harden/p/6528238.html
Copyright © 2011-2022 走看看