51nod 1239 欧拉函数之和【欧拉函数+杜教筛】
2024-08-24 22:13:06
和bzoj 3944比较像,但是时间卡的更死
设\( f(n)=\sum_{d|n}\phi(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\phi(i) \),然后很显然对于mu\( g(n)=1\),对于\( g(n)=n*(n+1)/2 \),然后可以这样转化一下:
\[g(n)=\sum_{i=1}^{n}\sum_{d|n}\phi(d)
\]
\]
\[=\sum_{d=1}^{n}\phi(d)\left \lfloor \frac{n}{d} \right \rfloor
\]
\]
\[=\sum_{d=1}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor)
\]
\]
\[s(n)=g(n)-\sum_{d=2}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor)
\]
\]
然后递归求解即可。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long N=5000005,m=5000000,mod=1e9+7,inv2=500000004;
long long n,phi[N],q[N],tot,p[N];
bool v[N];
long long getp(long long x)
{
return (x<=m)?phi[x]:p[n/x];
}
void wk(long long x)
{//cout<<x<<endl;
if(x<=m)
return;
long long t=n/x;
if(v[t])
return;
v[t]=1;
long long w=x%mod;
p[t]=w*(w+1)%mod*inv2%mod;//cout<<x<<" "<<t<<endl;
for(long long i=2,la=1;la<x;i=la+1)
{
la=x/(x/i);
wk(x/i);
p[t]=(p[t]-getp(x/i)*(la-i+1)%mod)%mod;
}
}
int main()
{
phi[1]=1;
for(long long i=2;i<=m;i++)
{
if(!v[i])
{
q[++tot]=i;
phi[i]=i-1;
}
for(long long j=1;j<=tot&&i*q[j]<=m;j++)
{
long long k=i*q[j];
v[k]=1;
if(i%q[j]==0)
{
phi[k]=phi[i]*q[j];
break;
}
phi[k]=phi[i]*(q[j]-1);
}
}
for(long long i=2;i<=m;i++)
phi[i]=(phi[i]+phi[i-1])%mod;
scanf("%lld",&n);//cout<<n<<" "<<n%mod<<" "<<(n+1)%mod<<endl;
//g=(n%mod)*((n+1)%mod)%mod*inv2%mod;//cout<<g<<endl;
if(n<=m)
printf("%lld\n",phi[n]);
else
{
memset(v,0,sizeof(v));
wk(n);
printf("%lld\n",(p[1]%mod+mod)%mod);
}
return 0;
}
最新文章
- Java线程池使用说明
- 形象的讲解angular中的$q与promise(转)
- ProcDump
- 高性能MySQL——第一章MySQL的架构与历史
- 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
- 安装IIS之后运行aspx 显示“服务器应用程序不可用” 解决办法
- poj City Horizon (线段树+二分离散)
- SharePoint 2010 母版页制作的简单介绍
- SQL删除重复行和查询所有大于某成绩的语句分析
- js获取页面名称
- 两台linux机器时间同步
- hdu1848 Fibonacci again and again(SG游戏功能)
- 使用prismjs为网站添加代码高亮功能
- Mahout分布式运行实例:基于矩阵分解的协同过滤评分系统(一个命令实现文件格式的转换)
- 小甲鱼OD学习第12讲
- android沉浸式状态栏的实现
- Python 3.5 filter
- 亿级流量场景下,大型缓存架构设计实现【1】---redis篇
- npm——安装教程、安装vue脚手架
- ZJUT 地下迷宫 (高斯求期望)