[51nod1239欧拉函数之和]
来自FallDream的博客,未经允许,请勿转载,谢谢
---------------------------------------------
给定n,求$S(n)=\sum_{i=1}^{n}\varphi(i)$ n<=$10^{10}$
跟求莫比乌斯函数前缀和一样的做法,也可以推出$S(n)=\frac{n*(n+1)}{2}-\sum_{i=2}^{n}S(i)$,具体推法可以戳这里
另外,我们还可以从gcd入手。
数对$\left(x,y\right),x\leqslant y$共有$\frac{n*(n+1)}{2}$种,那么$S(n)=\sum1\left(gcd(x,y)=1, x\leqslant y\leqslant n\right)) $
又$num\left(gcd(x,y)=c\right)$的有$S(\lfloor n/c\rfloor)$种,所以$S(n)=\frac{n*(n+1)}{2}-\sum_{i=2}^{n}S(i)$
虽然推法不同,但是结果是一样的,然后记忆化搜索,复杂度$O(n^{\frac{2}{3}})$ 用一个手写map加速,又是轻松rank1
然后latex真好用!!!!!
#include<iostream>
#include<cstdio>
#include<cmath>
#define MAXN 5000000
#define mod 2333333
#define ditoly 1000000007
#define ll long long
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
return x*f;
} struct my_map{
ll x,ans;int next;
}e[mod+];
int head[mod+],num=;
void ins(ll x,ll sum)
{
int j=x%mod;
e[++num]=(my_map){x,sum,head[j]};
head[j]=num;
} int phi[MAXN+];
ll ans=; ll calc(ll n)
{
if(n<=MAXN) return phi[n];
for(int i=head[n%mod];i;i=e[i].next)
if(e[i].x==n)return e[i].ans;
ll sum=(n%ditoly)*((n+)%ditoly)%ditoly*%ditoly;
int q=sqrt(n);
for(int i=;i<=q;i++)
sum=(sum-calc(n/i))%ditoly;
q=n/(q+);
for(int i=;i<=q;i++)
sum=(sum-((n/i-(n/(i+)))%ditoly*calc(i))+ditoly)%ditoly;
ins(n,sum);
return sum;
} int main()
{
for(int i=;i<=MAXN;i++)phi[i]=i;
for(int i=;i<=MAXN;i++)if(phi[i]==i)
{
phi[i]=i-;
for(int j=i<<;j<=MAXN;j+=i)
phi[j]=phi[j]/i*(i-);
}num=;
for(int i=;i<=MAXN;i++)phi[i]=(phi[i]+phi[i-])%ditoly;
cout<<calc(read())<<endl;
return ;
}
[51nod1239欧拉函数之和]的更多相关文章
- 51nod1239 欧拉函数之和
跟1244差不多. //由于(x+1)没有先mod一下一直WA三个点我... //由于(x+1)没有先mod一下一直WA三个点我... #include<cstdio> #include& ...
- 杜教筛--51nod1239 欧拉函数之和
求$\sum_{i=1}^{n}\varphi (i)$,$n\leqslant 1e10$. 这里先把杜教筛的一般套路贴一下: 要求$S(n)=\sum_{i=1}^{n}f(i)$,而现在有一数论 ...
- [51nod1239] 欧拉函数之和(杜教筛)
题面 传送门 题解 话说--就一个杜教筛--刚才那道拿过来改几行就行了-- //minamoto #include<bits/stdc++.h> #define R register #d ...
- 51 NOD 1239 欧拉函数之和(杜教筛)
1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究 ...
- [51Nod 1244] - 莫比乌斯函数之和 & [51Nod 1239] - 欧拉函数之和 (杜教筛板题)
[51Nod 1244] - 莫比乌斯函数之和 求∑i=1Nμ(i)\sum_{i=1}^Nμ(i)∑i=1Nμ(i) 开推 ∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n== ...
- 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛
题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...
- 51nod 1239 欧拉函数之和(杜教筛)
[题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...
- 欧拉函数之和(51nod 1239)
对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi( ...
- 【51Nod 1239】欧拉函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 还是模板题. 杜教筛:\[S(n)=\frac{n(n+1)}{2 ...
随机推荐
- fread函数详解
函数原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ) b ...
- Raid5两块硬盘掉线可以恢复数据吗_raid数据恢复案例分享
本案例中发生故障的存储类型是HP P2000,虚拟化平台为vmware exsi,共有10块硬盘组成raid5(硬盘容量为1t,其中6号盘是热备盘),由于某些故障导致阵列中两块硬盘亮黄灯掉线,硬盘无法 ...
- JAVA_SE基础——3.Java程序的开发流程
上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...
- Oracle闪回技术
(一)闪回技术概要 闪回技术是数据库备份与恢复的重要补充手段,主要包括以下7种特性: 特性 原理 数据库支持 闪回查询(Flashback Query) 利用undo表空间中的回退信息,查询过去某个时 ...
- Python 黑客相关电子资源和书籍推荐
原创 2017-06-03 玄魂工作室 玄魂工作室 继续上一次的Python编程入门的资源推荐,本次为大家推荐的是Python网络安全相关的资源和书籍. 在去年的双11送书的时候,其实送过几本Pyth ...
- Let's Encrypt,站点加密之旅
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入 ...
- Docker学习笔记 - Docker的镜像
一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面 ...
- ELK学习总结(2-3)Mget获取多个文档
mget 获取多个文档 1.curl 命令格式:mget获取多个文档: curl 'localhost:9200/_mget' -d '{ "docs":[ { " ...
- Easyui Datagrid 修改显示行号列宽度
EasyUI中Datagrid的第一列显示行号,可是如果数据量大的的时候,显示行号的那一列数据会显示不完全的. 可以通过修改Datagrid的样式来解决这个问题,在样式中加入下面这个样式,就可以自己修 ...
- Window7系统下安装jdk
根据电脑的操作系统下载相对于的jdk版本(32位或64位),我安装的是:java_jdk1.7 [计算机]——[属性]——[高级系统设置]——高级——[环境变量] 系统变量——>新建JAVA_H ...