博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj3944] Sum
阅读量:4324 次
发布时间:2019-06-06

本文共 1775 字,大约阅读时间需要 5 分钟。

Description

img

Input

一共T+1行

第1行为数据组数T(T<=10)

第2~T+1行每行一个非负整数N,代表一组询问

Output

一共T行,每行两个用空格分隔的数ans1,ans2

Sample Input

612813302333

Sample Output

1 12 022 -258 -3278 -31655470 2

solution

杜教筛模板题无敌卡常题

先搬出套路式子:

\[ S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor) \]
对于\(\mu(n)\),拿一个\(I(n)=1\)和他卷起来,可以得到:
\[ S(n)=1-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor) \]
对于\(\varphi(n)\),同样拿一个\(I(n)\)卷起来,得到:
\[ S(n)=\frac{n*(n+1)}{2}-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor) \]
然后飞速的敲完代码,提交,\(TLE\)......

可能是我太弱了,所有的卡常技巧都用上了,然而并没有什么用....

然后突然发现一个这样的事情:

对于\(\varphi(n)\),其实可以写成这个样子:

\[ \varphi(n)=\sum_{i=1}^{n}\epsilon(\gcd(i,n)) \]
其中\(\epsilon(n)=[n=1]\)

然后苦思冥想无果后闲着无聊对前缀和反演下:

\[ \begin{align} S(n)&=\sum_{i=1}^{n}\sum_{d=1}^i\epsilon(\gcd(d,i))\\ &=\sum_{i=1}^{n}\sum_{d=1}^i\sum_{d_1|i\&d_1|d}\mu(d_1)\\ &=\sum_{i=1}^{n}\sum_{d_1|i}\sum_{d=1}^{\frac{i}{d_1}}\mu(d_1)\\ &=\sum_{i=1}^n\sum_{d_1|i}\mu(d_1)\frac{i}{d_1}\\ &=\sum_{d_1=1}^n\sum_{i=1}^{\frac{n}{d_1}}\mu(d_1)*i\\ &=\sum_{d_1=1}^n\mu(d_1)*\frac{\lfloor\frac{n}{d_1}\rfloor(\lfloor\frac{n}{d_1}\rfloor+1)}{2} \end{align} \]
然后惊奇的发现,这里面用到的\(\mu(n)\)的前缀和正好是第二问要求的,然后这么一来直接快了一倍不止,成功的只跑了\(6sAC\)

#include
using namespace std;#define ll long long void read(int &x) { x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f; for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;}void print(int x) { if(x<0) x=-x,putchar('-'); if(!x) return ;print(x/10),putchar(x%10+48);}void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}const int maxn = 3e6+1;int pri[maxn],vis[maxn],n,tot,inv2,inv6,mu[maxn];void sieve() { mu[1]=1; for(int i=2;i
Mu;/*ll sum_phi(int n) { if(n

转载于:https://www.cnblogs.com/hbyer/p/10073676.html

你可能感兴趣的文章
DS博客作业07--查找
查看>>
c# Invalidate() Update() Refresh()的区别
查看>>
work of 1/5/2016
查看>>
自己做了个微信小程序
查看>>
CMD获取当前目录的绝对路径
查看>>
HTML5新规范和CSS3新特性
查看>>
使用php后台给自己做一个页面路由,配合ajax实现局部刷新。
查看>>
类与对象(二)
查看>>
NSString 的常用方法
查看>>
mysql的engine不同,导致事物回滚失败的问题
查看>>
JAVAWeb使用POI做导出Excel
查看>>
今天解决了首页无头像被显示的问题
查看>>
charts 画折线图
查看>>
[py]__name__ 属于哪个文件
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
实验四【bx】和loop的使用
查看>>
P1313 计算系数
查看>>
myBatis之入门示例
查看>>