zoukankan      html  css  js  c++  java
  • 51nod1244 欧拉函数之和 杜教筛

    和上一题差不多,一个是μ*I=e,一个是φ*I=Id

    稍改就得到了这题的代码

    (我会告诉你我一开始逆元算错了吗)

     1 #include <bits/stdc++.h>
     2 #define MAX 5000000
     3 #define MOD 1000000007
     4 using namespace std;
     5 long long a,b,N;
     6 long long phi[MAX+1],p[MAX],ans[MAX];
     7 bool bo[MAX+1];
     8 long long work(long long n)
     9 {
    10     if(n<=MAX) return phi[n];
    11     if(ans[N/n]) return ans[N/n];
    12     long long ret=n%MOD*(n+1)%MOD*500000004%MOD;
    13     for(long long j=2;j<=n;)
    14     {
    15         long long nex=n/(n/j);
    16         ret=(ret-(nex-j+1)%MOD*work(n/j)%MOD+MOD)%MOD;
    17         j=nex+1;
    18     }
    19     ans[N/n]=ret;
    20     return ret;
    21 }
    22 int main()
    23 {
    24     int sum=0;phi[1]=1;
    25     for(int i=2;i<=MAX;i++)
    26     {
    27         if(!bo[i])
    28             p[++sum]=i,phi[i]=i-1;
    29         for(int j=1;j<=sum && p[j]*i<=MAX;j++)
    30         {
    31             bo[p[j]*i]=1;
    32             phi[i*p[j]]=phi[i]*((i%p[j])?phi[p[j]]:p[j]);
    33             if(i%p[j]==0) break;
    34         }
    35     }
    36     for(int i=2;i<=MAX;i++)
    37         phi[i]=(phi[i]+phi[i-1])%MOD;
    38     scanf("%lld",&a);
    39     N=a; 
    40     printf("%lld
    ",work(a));
    41     return 0;
    42 }
  • 相关阅读:
    JDBC事务
    JDBC连接池和DBUtils
    原生JDBC
    基本的查询语句
    多表查询
    mysql单表
    基础加强_XML
    基础加强_注解_类加载器_动态代理
    页面加载loading动画
    移动端手动控制页面高度
  • 原文地址:https://www.cnblogs.com/wanglichao/p/6837902.html
Copyright © 2011-2022 走看看