居然扒到了学长出的题

和3944差不多(?),虽然一眼看上去很可怕但是仔细观察发现,对于mu来讲,答案永远是1(对于带平方的,mu值为0,1除外),然后根据欧拉筛的原理,\( \sum_{i=1}{n}\phi(i2)=\sum_{i=1}^{n}\phi(i)*i \),然后就可以正常推了:

\[g(n)=\sum_{i=1}^{n}i\sum_{d=1}^{i}[d|i]\phi(d)=\sum_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6}
\]

\[s(n)=\sum_{i=1}^{n}i\phi(i)
$$那么把g展开:
\]

g(n)=\sum_{i=2}{n}i\sum_{d=1}{i-1}[d|i]\phi(d)+s(n)

\[\]

s(n)=g(n)-\sum_{i=2}{n}i\sum_{d=1}{i-1}[d|i]\phi(d)

\[\]

=g(n)-\sum_{k=2}{n}k\sum_{d=1}{\left \lfloor \frac{n}{k} \right \rfloor}d\phi(d)

\[\]

=g(n)-\sum_{k=2}^{n}k*s(\left \lfloor \frac{n}{k} \right \rfloor)

\[\]

=\frac{n(n+1)(2n+1)}{6}-\sum_{k=2}^{n}k*s(\left \lfloor \frac{n}{k} \right \rfloor)

\[这就是标准的杜教筛递归子问题形式了,直接求解即可。
```cpp
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
const int N=1000005,m=1000000,mod=1e9+7;
int phi[N],mi[N],q[N],tot,n,k,s[N],ans[N];
bool v[N];
map<long long,int>mp;
int S(int n,int l)
{
if(l<=1)
return phi[n*l];
if(n==1)
{
if(l<=m)
return s[l];
if(ans[k/l]!=-1)
return ans[k/l];
long long re=(long long)l*(l+1)/2%mod;
for(int i=2,la;i<=l;i=la+1)
{
la=l/(l/i);
if(l/i<=m)
re=(re-(long long)s[l/i]*(la-i+1)%mod)%mod;
else
re=(re-(long long)S(1,l/i)*(la-i+1)%mod)%mod;
}
return ans[k/l]=(re%mod+mod)%mod;
}
if(mp[(long long)n*mod+l])
return mp[(long long)n*mod+l];
long long re=0ll;
for(int i=1;i*i<=n;i++)
if(n%i==0)
{
re=(re+(long long)phi[n/i]*S(i,l/i)%mod)%mod;
if(i*i!=n)
re=re+(long long)phi[i]*S(n/i,l/(n/i))%mod;
}
return mp[(long long)n*mod+l]=(re%mod+mod)%mod;
}
// int S(int n,int l)
// {
// if (l<=1) return phi[n*l];
// if (n==1)
// {
// if (l<=m) return s[l];
// if (ans[k/l]!=-1) return ans[k/l];
// int re=(int)l*(l+1)/2%mod;
// for (int i=2,la;i<=l;i=la+1)
// {
// la=l/(l/i);
// if (l/i<=m) re=re-(int)(la-i+1)*s[l/i]%mod+mod;
// else re=re-(int)(la-i+1)*S(1,l/i)%mod+mod;
// }
// return ans[k/l]=re%mod;
// }
// else
// {
// if (mp[(int)n*mod+l]) return mp[(int)n*mod+l];
// int re=0;
// for (int i=1;i*i<=n;i++)
// if (n%i==0)
// {
// re=re+(int)phi[n/i]*S(i,l/i)%mod;
// if (i*i!=n) re=re+(int)phi[i]*S(n/i,l/(n/i))%mod;
// }
// return mp[(int)n*mod+l]=re%mod;
// }
// }
int main()
{
memset(ans,-1,sizeof(ans));
mi[1]=phi[1]=1;
for(int i=2;i<=m;i++)
{
if(!v[i])
{
q[++tot]=i;
phi[i]=i-1;
mi[i]=i;
}
for(int j=1;j<=tot&&i*q[j]<=m;j++)
{
int k=i*q[j];
v[k]=1;
if(i%q[j]==0)
{
phi[k]=phi[i]*q[j];
mi[k]=mi[i];
break;
}
phi[k]=phi[i]*(q[j]-1);
mi[k]=mi[i]*q[j];
}
}
for(int i=1;i<=m;i++)
s[i]=(s[i-1]+phi[i])%mod;
scanf("%lld%lld",&n,&k);
if(n>k)
swap(n,k);
long long ans=0ll;
for(int i=1;i<=n;i++)
ans=(ans+((long long)i/mi[i]*S(mi[i],k)%mod))%mod;
printf("%lld\n",(ans%mod+mod)%mod);
return 0;
}
```\]

bzoj 4916: 神犇和蒟蒻【欧拉函数+莫比乌斯函数+杜教筛】的更多相关文章

  1. [BZOJ 4916]神犇和蒟蒻

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

  2. 【刷题】BZOJ 4916 神犇和蒟蒻

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

  3. bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)

    题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...

  4. 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】

    用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...

  5. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  6. 【BZOJ4916】神犇和蒟蒻(杜教筛)

    [BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] ...

  7. 【BZOJ4916】神犇和蒟蒻 解题报告

    [BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一群神犇叫sk和ypl和ssr和hjh和hgr和gjs和yay和xj和zwl和dcx和lyy和dtz和hy和xfz和myh和yw ...

  8. 【BZOJ4805】欧拉函数求和(杜教筛)

    [BZOJ4805]欧拉函数求和(杜教筛) 题面 BZOJ 题解 好久没写过了 正好看见了顺手切一下 令\[S(n)=\sum_{i=1}^n\varphi(i)\] 设存在的某个积性函数\(g(x) ...

  9. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

随机推荐

  1. hdu——3861 The King’s Problem

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. vs2015编译zlib1.2.8

    编译最新的libcurl 7.44.0时须要先编译下zlib 1.2.8遇到了点小麻烦 记录下 1.编译步骤 a.先用vs2015命令行运行下bld_ml32.bat批处理 b.将inffas32.o ...

  3. Ansible 详细用法说明(一)

    一.概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, func, zabbix agentless(无须代理工具 ...

  4. Android双向seekbar(带刻度)

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/disso ...

  5. Android从无知到有知——NO.6

    紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=andro ...

  6. 故障案例:磁盘空间不足可能引起的mysql问题

    此前在工作中.由于客户的磁盘空间报警没怎么注意.空间不足引起了下面可能发生的mysql问题 1    mysql进程起不来 2    mysql无法正常关闭,必须kill -9 3    mysql能 ...

  7. C++常用的函数,好的博客文章整理,集锦

    http://www.cnblogs.com/xianghang123/archive/2011/08/24/2152404.html    c语言产生随机数的方法 http://blog.sina. ...

  8. Apache Hadoop 和Hadoop生态圈

    Apache Hadoop 和Hadoop生态圈 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户能够在不了解分布式底层细节的情况下.开发分布式程序.充分利用集群的威力进行快速 ...

  9. 解决GitHub加载和下载慢问题

    1. 修改HOSTS文件: 在“C:\Windows\System32\drivers\etc” 下的HOSTS文件,添加以下地址:   151.101.44.249 github.global.ss ...

  10. NHibernate不支持复杂的linq,就一定要用DataTable这么低级吗

    有些linq,好不容易写出来,正想扬眉吐屁一番,不料用NHibernate一执行,却报错,说是不支持,我靠. 只好捏着鼻子写一大段sql,交给它.这种直接执行SQL的情况,我看我同事写的,全部都是返回 ...