【BZOJ4916】神犇和蒟蒻 杜教筛
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4916
第一个询问即求出$\sum_{i=1}^{n} { \mu (i^2)} $,考虑到$\mu$的定义,当i>1时必存在次数为偶数的质因子,故在数据范围内,$\sum_{i=1}^{n} { \mu (i^2)} $恒等于1。
第二个询问即求出$\sum_{i=1}^{n} { \varphi (i^2)} $,考虑到$\varphi$的定义,则有$\varphi(i^2)=i\times \varphi(i)$。
问题转化为求$\sum_{i=1}^{n} { i\times \varphi (i)} $
下面开始化简式子,考虑式子$n=\sum_{i|n}{\varphi (i)}$
通过简单变式,得:$n=\sum_{i|n\&i<n}{\varphi (i)}+\varphi (n)$
移项,得:$\varphi (n)=n-\sum_{i|n\&i<n}{\varphi (i)}$
通过之前推出的式子,得:$\mu(n^2)=n^2-n\times\sum_{i|n\&i<n}{\mu(i)}$
我们设$\Phi(n)=\sum_{i=1}^{n} { \varphi (i^2)}$
则:
$\Phi(n)=\sum_{i=1}^{n} (i^2-i \times \sum_{j|i\&j<i}\varphi(j))$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=1}^{n} i \times \sum_{j|i\&j<i}\varphi(j)$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^{n} i \times \sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}\varphi(j)\times j$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^{n} i \times \Phi(\left \lfloor \frac{n}{i} \right \rfloor)$
然后用杜教筛的思路+预处理1~19260817的$i\times \mu (i)$的前缀和即可
#include<bits/stdc++.h>
#define L long long
#define M 19260817
#define MOD 1000000007
#define inv6 166666668
using namespace std; int b[M]={},phi[M]={},use=; L pri[M]={};
void init(){
phi[]=;
for(int i=;i<M;i++){
if(!b[i]) pri[++use]=i,phi[i]=i-;
for(int j=;j<=use&&i*pri[j]<M;j++){
b[i*pri[j]]=;
if(i%pri[j]==) {phi[i*pri[j]]=phi[i]*pri[j]; break;}
phi[i*pri[j]]=phi[i]*(pri[j]-);
}
}
for(L i=;i<M;i++) phi[i]=(phi[i-]+phi[i]*i)%MOD;
} map<int,L> mp;
L solve(L n){
if(n<M) return phi[n];
if(mp[n]) return mp[n];
L pls=n*(n+)%MOD*(n<<|)%MOD*inv6%MOD,ans=;
for(L i=,j;i<=n;i=j+){
j=n/(n/i);
L sumi=((i+j)*(j-i+)/)%MOD;
ans=(ans+solve(n/i)%MOD*sumi)%MOD;
}
ans=(pls-ans+MOD)%MOD;
return mp[n]=ans;
} int main(){
init();
int n; scanf("%d",&n); printf("1\n");
printf("%lld\n",solve(n));
}
【BZOJ4916】神犇和蒟蒻 杜教筛的更多相关文章
- BZOJ4916: 神犇和蒟蒻(杜教筛)
题意 求 $$\sum_{i = 1}^n \mu(i^2)$$ $$\sum_{i = 1}^n \phi(i^2)$$ $n \leqslant 10^9$ Sol zz的我看第一问看了10min ...
- [BZOJ4916]神犇和蒟蒻 杜教筛/Min_25筛
题目大意: 给定\(n\le 10^9\),求: 1.\(\sum_{i=1}^n\mu(i^2)\) 2.\(\sum_{i=1}^n\varphi(i^2)\) 解释 1.\(\sum_{i=1} ...
- LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻
P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...
- BZOJ4916: 神犇和蒟蒻【杜教筛】
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】
题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...
- BZOJ4916 神犇和蒟蒻(欧拉函数+杜教筛)
第一问是来搞笑的.由欧拉函数的计算公式容易发现φ(i2)=iφ(i).那么可以发现φ(n2)*id(n)(此处为卷积)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 .这样就有了杜教筛所要求的容易算 ...
- Bzoj4916: 神犇和蒟蒻
题面 传送门 Sol 第一问puts("1") 第二问,\(\varphi(i^2)=i\varphi(i)\) 设\(\phi(n)=\sum_{i=1}^{n}i\varphi ...
- 【BZOJ4916】神犇和蒟蒻(杜教筛)
[BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] ...
- 【BZOJ4916】神犇和蒟蒻 解题报告
[BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一群神犇叫sk和ypl和ssr和hjh和hgr和gjs和yay和xj和zwl和dcx和lyy和dtz和hy和xfz和myh和yw ...
随机推荐
- 乞丐版servlet容器第4篇
6. NIOConnector 现在为Server添加NIOConnector,添加之前可以发现我们的代码其实是有问题的.比如现在的代码是无法让服务器支持同时监听多个端口和IP的,如同时监听 127. ...
- shell的一些简单用法
一 BASH的属性 BASH中会存储一些自身属性的参数,启用或关闭某一项功能 例如控制* .字符是否为通配 查看参数 set -o 关闭noglob参数 set -o noglob ls * ls: ...
- 2081.09.22 Kuma(非旋treap)
描述 有N张卡片,编号从0到n-1, 刚开始从0到n-1按顺序排好. 现有一个操作, 对于p. l,表示从第p张卡片之后的l张卡片拿到 最前面. 例如n=7的时候, 刚开始卡片序列为0 1 2 3 4 ...
- UVa 11992 Fast Matrix Operations (线段树,区间修改)
题意:给出一个row*col的全0矩阵,有三种操作 1 x1 y1 x2 y2 v:将x1 <= row <= x2, y1 <= col <= y2里面的点全部增加v: 2 ...
- c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常
c# Clipboard.SetDataObject(bmp1) 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttri ...
- (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )
http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others) Memo ...
- 常用算法 (JS实现)
全排序列 function swap(array,a,b){ var m=array[a]; array[a]=array[b]; array[b]=m; } function full_sort(a ...
- RepositionBars的用法和参数的意义(引用别人的)
MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...
- java poi 获取单元格值时间
完整帮助类:JAVA poi 帮助类 /* * poi特殊日期格式:数字格式化成-yyyy年MM月dd日,格式 * */ private static ArrayList<String> ...
- 基于Quartz.net的远程任务管理系统 一
在上一篇绪中,已经介绍了整个项目的情况下了,接下来就是开始一步步做起来了. 首先:先整个我们的Job任务表,以及Job执行日志表.SQL如下: drop table if exists job_inf ...