zoukankan      html  css  js  c++  java
  • BZOJ 4916 神犇和蒟蒻

    Description

    很久很久以前,有一只神犇叫yzy;
    很久很久之后,有一只蒟蒻叫lty;

    Input

    请你读入一个整数N;1<=N<=1E9,A、B模1E9+7;

    Output

    请你输出一个整数A=sum_{i=1}^N{mu (i^2)};
    请你输出一个整数B=sum_{i=1}^N{varphi (i^2)};

    Sample Input

    1

    Sample Output

    1
    1
    第一问很好笑,众所周知,μ(i*j)如果gcd(i,j)!=1,那么μ(i*j)就是0
    也就是说,第一问无论n多大就是1
    第二问可以转化为$sum_{i=1}^ni*phi(i)$
    这是从定义式推来的
    $f[n]=n*phi(n)$
    $S[n]=sum_{i=1}^ni*phi(i)$
    然后就是杜教筛
    $g(1)S(n)=sum_{i=1}^n(f*g)(i)-sum_{i=2}^ng(i)S(frac{n}{i})$
    $sum_{i=1}^n(f*g)(i)$
    $=sum_{i=1}^nsum_{d|i}f(frac{i}{d})g(d)$
    $=sum_{i=1}^nsum_{d|i}frac{i}{d}phi(frac{i}{d})g(d)$
    因为$sum_{d|i}phi(d)=i$
    所以令g(x)=x
    $=sum_{i=1}^n{i}sum_{d|i}phi(frac{i}{d})$
    $=sum_{i=1}^ni^2$
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<map>
     7 using namespace std;
     8 typedef long long lol;
     9 int N=8000000,Mod=1e9+7,inv6;
    10 int prime[1000001],phi[8000000+5],n,tot;
    11 bool vis[8000000+5];
    12 map<int,int> M;
    13 int qpow(int x,int y)
    14 {
    15   int res=1;
    16   while (y)
    17     {
    18       if (y&1) res=1ll*res*x%Mod;
    19       x=1ll*x*x%Mod;
    20       y>>=1;
    21     }
    22   return res;
    23 }
    24 int query(int x)
    25 {int i,pos;
    26   if (x<=N) return phi[x];
    27   if (M[x]) return M[x];
    28   int as=1ll*(x+1)*x%Mod*(2*x+1)%Mod*inv6%Mod;
    29   for (i=2;i<=x;i=pos+1)
    30     {
    31       pos=x/(x/i);
    32       as-=(1ll*(pos+i)*(pos-i+1)/2)%Mod*query(x/i)%Mod;
    33       as=(as+Mod)%Mod;
    34     }
    35   return M[x]=as;
    36 }
    37 void pre()
    38 {int i,j;
    39   phi[1]=1;
    40   for (i=2;i<=N;i++)
    41     {
    42       if (vis[i]==0)
    43     {
    44       prime[++tot]=i;
    45       phi[i]=i-1;
    46     }
    47       for (j=1;j<=tot;j++)
    48     {
    49       if (1ll*i*prime[j]>N) break;
    50       vis[i*prime[j]]=1;
    51       if (i%prime[j]==0)
    52         {
    53           phi[i*prime[j]]=1ll*phi[i]*prime[j]%Mod;
    54           break;
    55         }
    56       else phi[i*prime[j]]=1ll*phi[i]*(prime[j]-1)%Mod;
    57     }
    58     }
    59   for (i=1;i<=N;i++)
    60     {
    61       phi[i]=(1ll*i*phi[i]%Mod+phi[i-1])%Mod;
    62     }
    63 }
    64 int main()
    65 {
    66   cin>>n;
    67   cout<<1<<endl;
    68   N=min(N,n);
    69   pre();
    70   inv6=qpow(6,Mod-2);
    71   printf("%d
    ",query(n));
    72 }
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8351609.html
Copyright © 2011-2022 走看看