来自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欧拉函数之和]的更多相关文章

  1. 51nod1239 欧拉函数之和

    跟1244差不多. //由于(x+1)没有先mod一下一直WA三个点我... //由于(x+1)没有先mod一下一直WA三个点我... #include<cstdio> #include& ...

  2. 杜教筛--51nod1239 欧拉函数之和

    求$\sum_{i=1}^{n}\varphi (i)$,$n\leqslant 1e10$. 这里先把杜教筛的一般套路贴一下: 要求$S(n)=\sum_{i=1}^{n}f(i)$,而现在有一数论 ...

  3. [51nod1239] 欧拉函数之和(杜教筛)

    题面 传送门 题解 话说--就一个杜教筛--刚才那道拿过来改几行就行了-- //minamoto #include<bits/stdc++.h> #define R register #d ...

  4. 51 NOD 1239 欧拉函数之和(杜教筛)

    1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究 ...

  5. [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== ...

  6. 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛

    题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...

  7. 51nod 1239 欧拉函数之和(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...

  8. 欧拉函数之和(51nod 1239)

    对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi( ...

  9. 【51Nod 1239】欧拉函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 还是模板题. 杜教筛:\[S(n)=\frac{n(n+1)}{2 ...

随机推荐

  1. JAVA中最容易让人忽视的基础。

    可能很多找编程工作的人在面试的时候都有这种感受,去到一个公司填写面试试题的时候,多数人往往死在比较基础的知识点上.不要奇怪,事实就是如此一般来说,大多数公司给出的基础题大概有122道,代码题19道左右 ...

  2. bzoj千题计划245:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 查询最远点对,带修改 显然可以用动态点分治 对于每个点,维护两个堆 堆q1[x] 维护 点分树 ...

  3. Python之旅.第三章.函数4.01/4.02

    一.三元表达式 #普通的判断大小函数def max2(x,y): if x > y: return x else: return yres=max2(10,11)print(res)x=12y= ...

  4. VS 提示:请考虑使用 app.config 将程序集“XXX”从版本“XX”重新映射到版本“XX”,以解决冲突并消除警告。

    具体提示如下: 请考虑使用 app.config 将程序集"System.Web.Http.WebHost, Culture=neutral, PublicKeyToken=31bf3856 ...

  5. es6学习笔记--Interator和Generator(以及for-of的用法)

    这几天学习了遍历器和生成器,看着资料学,有点雾里缭绕的感觉,让人忍不住放弃,还好多看了好几遍,怼着资料里的例子让自己学会了Interator和Generator.   Interator,中文简称:遍 ...

  6. SpringCloud的Bus(一)消息中间件的概念和用途

    一.概念与定义 1.Message Broker Message Broker是一种消息验证.消息转换.消息路由的架构模式,用于如: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚 ...

  7. JavaScript中的单体模式四种实现方式

    /* 1 简单单体 */ var Singleton = { attr1: 1 , method1:function(){ //do sth } }; alert(Singleton.attr1); ...

  8. python/ Django之中间件

    python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...

  9. tar命令-vi编辑器-磁盘分区及格式化-软链接及硬链接文件

    一.tar命令 1.将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) [root@localhost  /] #  cat  /etc/passwd  /etc/group ...

  10. tornado解决高并发的初步认识牵扯出的一些问题

    #!/bin/env python # -*- coding:utf-8 -*- import tornado.httpserver import tornado.ioloop import torn ...