huntian oy (数论卷积杜教筛)
huntian oy (数论&卷积&杜教筛)
思路:
f(n,a,b)=∑i=1n∑j=1igcd(ia−ja,ib−jb)[gcd(i,j)=1](mod109+7)f(n,a,b)=\sum\limits_{i=1}^n \sum\limits_{j=1}^i gcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\pmod{10^9+7}f(n,a,b)=i=1∑nj=1∑igcd(ia−ja,ib−jb)[gcd(i,j)=1](mod109+7)
gcd(ia−ja,ib−jb)gcd(i^a-j^a,i^b-j^b)gcd(ia−ja,ib−jb)
ia−ja=(i−j)(ia−1+ia−2j+⋯+ja−1)i^a-j^a=(i-j)(i^{a-1}+i^{a-2}j+\dots+j^{a-1})ia−ja=(i−j)(ia−1+ia−2j+⋯+ja−1)
ib−jb=(i−j)(ib−1+ib−2j+⋯+jb−1)i^b-j^b=(i-j)(i^{b-1}+i^{b-2}j+\dots+j^{b-1})ib−jb=(i−j)(ib−1+ib−2j+⋯+jb−1)
因为a,ba,ba,b互质。
所以gcd(ia−ja,ib−jb)=i−jgcd(i^a-j^a,i^b-j^b)=i-jgcd(ia−ja,ib−jb)=i−j
原式=∑i=1n∑j=1i(i−j)[gcd(i,j)=1]=∑i=1ni×φ(i)−∑i=1n∑j=1ij[gcd(i,j)=1]=∑i=1ni×φ(i)−(∑i=1ni×φ(i)2−12)=∑i=1ni×φ(i)−12=\sum\limits_{i=1}^n \sum\limits_{j=1}^i (i-j)[gcd(i,j)=1]\\=\sum\limits_{i=1}^n i\times \varphi(i)-\sum\limits_{i=1}^n \sum\limits_{j=1}^i j[gcd(i,j)=1]\\=\sum\limits_{i=1}^n i\times \varphi(i)-(\sum\limits_{i=1}^n \dfrac{i\times \varphi(i)}{2}-\dfrac{1}{2})\\=\dfrac{\sum\limits_{i=1}^n i\times \varphi(i)-1}{2}=i=1∑nj=1∑i(i−j)[gcd(i,j)=1]=i=1∑ni×φ(i)−i=1∑nj=1∑ij[gcd(i,j)=1]=i=1∑ni×φ(i)−(i=1∑n2i×φ(i)−21)=2i=1∑ni×φ(i)−1
然后一股神秘的卷积力量可将式子变为递推式。(这里卷积学的不好待补)
S(n)=∑i=1ni2−∑i=2niS(ni)S(n)=\sum\limits_{i=1}^n i^2-\sum\limits_{i=2}^n iS(\dfrac{n}{i})S(n)=i=1∑ni2−i=2∑niS(in)
对于n≤106n\le 10^6n≤106的数据可用第一个式子。
否则用递推式记忆化递归。
求φ(i)\varphi(i)φ(i) 用欧拉筛即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e6+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
ll inv2,inv6,phi[N];
ll ksm(ll a,ll n){ll ans=1;while(n){if(n&1) ans=ans*a%mod;a=a*a%mod;n>>=1;}return ans;
}
int a[N],p[N],cnt;
void Euler(int n){phi[1]=1;for(int i=2;i<=n;i++){if(!a[i]){p[++cnt]=i;phi[i]=i-1;}for(int j=1;j<=cnt&&p[j]*i<=n;j++){a[p[j]*i]=1;if(i%p[j]==0){phi[p[j]*i]=phi[i]*p[j];break;}else phi[p[j]*i]=phi[i]*phi[p[j]];}}for(int i=2;i<=n;i++){phi[i]=(phi[i-1]+phi[i]*i%mod)%mod;}
}
unordered_map<int,int>mp;
int solve(int n){if(n<=N-5) return phi[n];if(mp[n]) return mp[n];ll tmp=1LL*n*(n+1)%mod*(2*n+1)%mod*inv6%mod; //这里要用3个mod for(int l=2,r;l<=n;l=r+1){r=n/(n/l);tmp-=1LL*(r-l+1)*(l+r)/2%mod*solve(n/l)%mod;tmp=(tmp%mod+mod)%mod; } return mp[n]=tmp;
}
int main(){inv2=ksm(2,mod-2),inv6=ksm(6,mod-2);int t;Euler(N-5);scanf("%d",&t);while(t--){int n,a,b;scanf("%d%d%d",&n,&a,&b);int ans=1LL*(solve(n)-1)*inv2%mod; ans=(ans%mod+mod)%mod;printf("%d\n",ans);}return 0;
}
huntian oy (数论卷积杜教筛)相关推荐
- P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]
简单的数学题 题目连接 https://www.luogu.org/problemnew/show/P3768 题目描述 输入一个正整数n,n≤1010n,n\le 10^{10}n,n≤1010和p ...
- 【学习小记】狄利克雷卷积+杜教筛
Preface 这东西分明就是玄学暴力 用来求简单的数论函数的前缀和,像φ,μφ,\mu这类的东西 当然,约数和,约数个数之类的也是可以的 Text 数论函数是指定义域是整数,陪域是复数的函数 Dir ...
- [CQOI2015]选数(数论分块+杜教筛)
problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...
- [学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛
筛积性函数的前缀和 常见积性函数 公式推导 狄利克雷卷积 杜教筛 实现 常见卷积 习题集 Sum 神犇和蒟蒻 简单的数学题 常见积性函数 μ\muμ φφφ d(n)d(n)d(n):nnn的约数个数 ...
- 2019年CCPC - 网络赛E:huntian oy【杜教筛】
题目: HDU---6706:huntian oy 题意: 给定N,a,b,求下面式子的值(求和后再mod 1e9+7): 分析: 一直怯于杜教筛不敢去学习[一看就会的杜教筛],今天终于迈出了这一步, ...
- HDU 6706 huntian oy (欧拉函数 + 杜教筛)
huntian oy 推式子 ∑i=1n∑j=1igcd(ia−ja,ib−jb)(gcd(i,j)==1)=∑i=1n∑j=1i(i−j)(gcd(i,j)==1)=∑i=1ni∑j=1i(gcd( ...
- matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...
数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...
- hdu 6706 huntian oy 杜教筛
传送门 思路: 打表发现 题意可转换成 (a,b互质) 求 与他互质的和为,因为i对应n−i 杜教筛看这里
- 杜教筛 狄利克雷卷积入门
补下暑假的坑 杜教筛看了两天勉勉强强才看懂了一点点 杜教牛逼 杜教筛意义 其实,对于一般的数论题,线性筛已经非常的优秀了. 但是就是有那些duliu出题人,硬是要把数据出到1e10之类的,就看你会不会 ...
最新文章
- 微软成功抵御峰值高达 2.4Tbps 的 DDoS 攻击
- 给你安利几个牛逼的公众号~
- 构建之法阅读笔记之速读篇
- eclipse配置PHP自动提示代码
- Asp.Net MVC1.0正式版发布
- java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
- chart控件支持鼠标滚轮放大缩小_强大的鼠标侧键功能设置工具:X-Mouse Button Control...
- Struts2的OGNL标签详解
- CTFHUB Web题解记录(信息泄露、弱口令部分)
- Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~
- java 单体 启动优化_java设计优化之单例模式
- java ant和maven_JAVA构建工具:Maven与Ant的区别
- 基于Java毕业设计游戏销售系统源码+系统+mysql+lw文档+部署软件
- excel单元格的合并与计算
- 使用exceljs导出部门-职位联动下拉框的excel
- 卡特兰数 Catalan number
- EfficientNet网络解析
- Android Camera旋转角度总结
- 虚拟机 邮箱服务器,虚拟机邮箱服务器设置密码
热门文章
- 微信小程序之打卡日历
- 利用决策树学习基金持仓并识别公司风格类型
- 《Mysql技术内幕,Innodb存储引擎》——事物
- C语言程序设计教程 北京邮电,C语言程序设计教程第3章_北京邮电大学出版社.ppt...
- laravel-admin 省市区三级联动的爬坑问题
- 多媒体的一些基本概念
- 百度webgis-api-加载卫星影像图
- 下载的百度卫星地图如何与谷歌卫星地图叠加
- Hadoop HA在停掉active namenode后无法自动切换到standby namenode
- vue cli4使用axios(通过RAP2生成后端接口)