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

求$\sum_{i=1}^{n}\varphi (i)$,$n\leqslant 1e10$。

这里先把杜教筛的一般套路贴一下:

要求$S(n)=\sum_{i=1}^{n}f(i)$,而现在有一数论函数$g(i)$,$g(i)$的前缀和很无脑,且$f$和$g$的狄利克雷卷积的前缀和很无脑(太巧了吧。。),那么由

$\sum_{i=1}^{n}\sum_{d|i}f(d)g(\frac{i}{d})$

闪一句,常用套路:设$i=kd$,转而枚举$k$。

$=\sum_{k=1}^{n}g(k)\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}f(d)$

$=\sum_{k=1}^{n}g(k)S(\frac{n}{k})$

可得

$g(1)S(n)=\sum_{i=1}^{n}\sum_{d|i}f(d)g(\frac{i}{d})-\sum_{k=2}^{n}g(k)S(\left \lfloor \frac{n}{k} \right \rfloor)$

进而递推求S。

官方复杂度:(假如构造的卷积的前缀和和g的前缀和都是O(1)可知)由于S那个除法的取值范围:1,2,……,m-1,m,n/m,n/(m-1),……,n,

可以想到预处理一部分再算一部分,假设预处理了$n^k$,那么总的复杂度就是:$max(n^k,没预处理的那一段)$,

没预处理的那段就是$\sum_{i=1}^{n^{1-k}}\sqrt{\frac{n}{i}}=n^{\frac{1}{2}}\sum_{i=1}^{n^{1-k}}i^{-\frac{1}{2}}\approx n^{\frac{1}{2}}n^\frac{1-k}{2}$

所以总的复杂度就是$max(n^k,n^{\frac{1}{2}}n^\frac{1-k}{2})$,当$\frac{1}{2}+\frac{1-k}{2}=k$时取得最小复杂度,$k=\frac{2}{3}$.

然而我这里有点不懂:因为没预处理的那段我们是直接递归+记忆化的,那记忆化的那部分复杂度怎么算?如何证明杜教筛过程中出现的数字个数的上限?暂不知。先用着。

好那这道题,我们要找一个前缀和无脑且和$\varphi $乘起来无脑的一个函数--1!——就是f(x)=1不知道叫什么——因为有$\varphi *1=Id$,$Id(x)=x$。

那就带进去玩一玩:

$\sum_{i=1}^{n}\sum_{d|i}\varphi (d)=\sum_{k=1}^{n}1\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\varphi (d)= \sum_{k=1}^{n}S(\left \lfloor \frac{n}{k} \right \rfloor)$

玩够一百下再玩一百下:

$S(n)=\sum_{i=1}^{n}\sum_{d|i}1*\varphi (d)-\sum_{k=2}^{n}S(\left \lfloor \frac{n}{k} \right \rfloor)=\frac{n(n+1)}{2}-\sum_{k=2}^{n}S(\left \lfloor \frac{n}{k} \right \rfloor)$。

OK丢去筛吧。

 1 #include<string.h>
 2 #include<stdlib.h>
 3 #include<stdio.h>
 4 #include<math.h>
 5 //#include<assert.h>
 6 #include<algorithm> 
 7 //#include<iostream>
 8 //#include<bitset>
 9 using namespace std;
10 
11 #define LL long long
12 LL n,m;
13 #define maxn 5000011
14 const int mod=1e9+7;
15 int phi[maxn],sumphi[maxn],prime[maxn/10],lp; bool notprime[maxn];
16 void pre(int n)
17 {
18     lp=0; phi[1]=1; sumphi[1]=1;
19     for (int i=2;i<=n;i++)
20     {
21         if (!notprime[i]) {prime[++lp]=i; phi[i]=i-1;}
22         sumphi[i]=sumphi[i-1]+phi[i];
23         sumphi[i]-=sumphi[i]>=mod?mod:0;
24         for (int j=1,tmp;j<=lp && 1ll*prime[j]*i<=n;j++)
25         {
26             notprime[tmp=i*prime[j]]=1;
27             if (i%prime[j]) phi[tmp]=1ll*phi[i]*(prime[j]-1)%mod;
28             else {phi[tmp]=1ll*phi[i]*prime[j]%mod; break;}
29         }
30     }
31 }
32 
33 struct Edge{LL to; int v,next;};
34 #define maxh 1000007
35 struct Hash
36 {
37     int first[maxh],le;Edge edge[maxn];
38     Hash() {le=2;}
39     void insert(LL y,int v)
40     {int x=y%maxh; Edge &e=edge[le]; e.to=y; e.v=v; e.next=first[x]; first[x]=le++;}
41     int find(LL y)
42     {
43         int x=y%maxh;
44         for (int i=first[x];i;i=edge[i].next) if (edge[i].to==y) return edge[i].v;
45         return -1;
46     }
47 }h;
48 
49 int du(LL n)
50 {
51     if (n<=m) return sumphi[n];
52     int tmp=h.find(n); if (tmp!=-1) return tmp;
53     LL tot=0;
54     for (LL i=2,last;i<=n;i=last+1)
55     {
56         last=n/(n/i);
57         tot+=(last-i+1)*du(n/i)%mod;
58         tot-=tot>=mod?mod:0;
59     }
60     LL ans=(n%mod)*((n+1)%mod)%mod*((mod+1)>>1)%mod-tot;
61     ans+=ans<0?mod:0;
62     h.insert(n,ans);
63     return ans;
64 }
65 
66 int main()
67 {
68     scanf("%lld",&n);
69     m=(LL)pow(pow(n,1.0/3),2); pre(m);
70     printf("%d\n",du(n));
71     return 0;
72 }
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/8315576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android Studio安装部署系列】目录

概述 从刚开始使用Android Studio到现在&#xff0c;下面所有目录下的操作&#xff0c;当时习惯性的把每一个整理成一个文档&#xff08;其实就是简单文字描述截图&#xff09;&#xff1b;有些地方当时是一知半解&#xff0c;现在会稍微明白一些。正好赶上现在有时间。所以就想…

修改npm全局安装模式的路径

修改npm全局安装模式的路径 在正式写此文章之前&#xff0c;我得说一点血泪史。 刚学nodeJS不久&#xff0c;很纳闷为什么全局安装的模块在 node安装目录/node_modules‘ 中没找到&#xff01;后来仔细看了下安装成功后的信息&#xff0c;才发现原来是自动安装在C盘了&#xff…

javascript创建类_如何使用JavaScript创建吹气效果

javascript创建类Have you ever wondered how you can create a realistic air blowing effect with JavaScript? Like the one shown on the evening TV shows, where multiple balls are being mixed up in a sphere-like object by leveraging air pressure? If you want …

Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?

There are many ways to make a fixed navbar stay inside a parents div container. Well go over the most straightforward one here.有很多方法可以使固定的导航栏停留在父级的div容器中。 我们将在这里介绍最简单的方法。 Imagine you have the following code, modified…

基于SpringBoot+Mybatis+Thymeleaf商品信息管理系统

github地址&#xff1a;github.com/zaiyunduan1…,如果对你有帮助&#xff0c;欢迎Star 主要用到的技术&#xff1a; 使用maven进行项目构建使用SpringbootMybatis搭建整个系统使用Thymeleaf模板技术实现页面静态化使用框架Bootstrap、JQuery开发前端界面使用MySQL和MongoDB分别…

在Mac上为自己手动编译安装一套PHP7的开发环境

首先你得去官网下载php7 beta1的版本 这里由于我是在mac上安装&#xff0c;所以就去下载linux相关的版本&#xff0c;地址也直接附上了php7 beta1windows版的官方也有发布详情猛戳&#xff1a;这里 解压安装包&#xff0c;进入源代码目录 tar -zxvf php-7.0.0beta1.tar.gz cd p…

卡特兰数 HDU2067 HDU4165 HDU1134

题目链接&#xff1a;https://vjudge.net/problem/HDU-2067 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11800 Accepted Submission(s): 5952 Problem Description小兔的叔叔从外面旅游回来给她…

Python的用途是什么? Python编程语言有10多种编码用途。

&#x1f44b;欢迎 (&#x1f44b; Welcome) Hi! Please take a moment to think about this question: 嗨&#xff01; 请花一点时间考虑这个问题&#xff1a; How is Python applied in real-world scenarios? Python如何在实际场景中应用&#xff1f; If you are learnin…

Publish/Subscribe

Publish/Subscribe 我们将会投递一个消息给多个消费者&#xff0c;这种模式被称为“publish/subscribe” 通俗的讲&#xff0c;前面的是点对点队列模型&#xff0c;现在讲的是发布订阅模型。 Exchanges producer&#xff1a;一个发送消息的用户应用程序 queue&#xff1a;一个存…

[转]在ROS下使用zeroconf配置多机通信

原文地址&#xff1a;http://www.corvin.cn/635.html&#xff0c;转载主要方便随时查阅&#xff0c;如有版权要求&#xff0c;请及时联系。 0x00 为何需要配置ROS多机通信 众所周知ROS是分布式系统&#xff0c;因此可以将机器人需要处理的复杂、计算量大的任务分解在多台机器上…

python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释...

python中斐波那契数列by Pau Pavn通过保罗帕文(PauPavn) The Fibonacci sequence is, by definition, the integer sequence in which every number after the first two is the sum of the two preceding numbers. To simplify:根据定义&#xff0c;斐波那契数列是整数序列&a…

1583. 统计不开心的朋友

1583. 统计不开心的朋友 给你一份 n 位朋友的亲近程度列表&#xff0c;其中 n 总是 偶数 。 对每位朋友 i&#xff0c;preferences[i] 包含一份 按亲近程度从高到低排列 的朋友列表。换句话说&#xff0c;排在列表前面的朋友与 i 的亲近程度比排在列表后面的朋友更高。每个列…

uva 247(floyd传递闭包)

为什么&#xff0c;逗号后面&#xff0c;还有空格........ #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #include <map> using namespace std; const int maxn50; int d[maxn][max…

VS Code 的常用快捷键和插件

注:文章摘自 风行天下一万号 - 博客园 vs code 的常用快捷键 1、注释&#xff1a; 单行注释&#xff1a;[ctrlk,ctrlc] 或 ctrl/取消单行注释&#xff1a;[ctrlk,ctrlu] (按下ctrl不放&#xff0c;再按k u)多行注释&#xff1a;[altshiftA]多行注释&#xff1a;/**2、移动行&a…

python包numpy_NumPy Python科学计算软件包的终极指南

python包numpyNumPy (pronounced "numb pie") is one of the most important packages to grasp when you’re starting to learn Python.NumPy(读作“麻木派”)是您开始学习Python时要掌握的最重要的软件包之一。 The package is known for a very useful data str…

NGINX原理 之 SLAB分配机制(转)

1 引言 众所周知&#xff0c;操作系统使用伙伴系统管理内存&#xff0c;不仅会造成大量的内存碎片&#xff0c;同时处理效率也较低下。SLAB是一种内存管理机制&#xff0c;其拥有较高的处理效率&#xff0c;同时也有效的避免内存碎片的产生&#xff0c;其核心思想是预分配。其按…

apk之间数据共享的方式

1、四大组件之ContentProvider大法2、shareUserId3、apk均去远端获取配置文件&#xff08;或接口&#xff09;4、AIDL&#xff08;bindService&#xff09;5、SharePreference设置为MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE模式&#xff0c;由于存在安全问题&#xff0c;已被…

蓝桥杯java 基础练习 十六进制转十进制

问题描述从键盘输入一个不超过8位的正的十六进制数字符串&#xff0c;将它转换为正的十进制数后输出。注&#xff1a;十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入FFFF样例输出65535import java.math.BigInteger; import java.util.Scanner;public …

dynamic web module消失不见

2019独角兽企业重金招聘Python工程师标准>>> 方法1&#xff1a;在project Facets选项中勾选Dynamic Web Module即可 方法2&#xff1a; 我用eclipse对项目进行修改名称&#xff0c;修改成功后。项目就没有Deployment Descriptor&#xff08;如下图红色框中&#xff…

576. 出界的路径数

576. 出界的路径数 给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内&#xff08;可以穿过网格边界到达网格之外&#xff09;。你 最多 可以移动 maxMove 次球。 给你五个整数 m、n、maxMove、star…