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∑n​j=1∑i​gcd(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∑n​j=1∑i​(i−j)[gcd(i,j)=1]=i=1∑n​i×φ(i)−i=1∑n​j=1∑i​j[gcd(i,j)=1]=i=1∑n​i×φ(i)−(i=1∑n​2i×φ(i)​−21​)=2i=1∑n​i×φ(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∑n​i2−i=2∑n​iS(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 (数论卷积杜教筛)相关推荐

  1. P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]

    简单的数学题 题目连接 https://www.luogu.org/problemnew/show/P3768 题目描述 输入一个正整数n,n≤1010n,n\le 10^{10}n,n≤1010和p ...

  2. 【学习小记】狄利克雷卷积+杜教筛

    Preface 这东西分明就是玄学暴力 用来求简单的数论函数的前缀和,像φ,μφ,\mu这类的东西 当然,约数和,约数个数之类的也是可以的 Text 数论函数是指定义域是整数,陪域是复数的函数 Dir ...

  3. [CQOI2015]选数(数论分块+杜教筛)

    problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1​,都除掉 KKK,特殊的 LLL 边界注意一下. H←H/K,L←(L−1)/K+1H\le ...

  4. [学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛

    筛积性函数的前缀和 常见积性函数 公式推导 狄利克雷卷积 杜教筛 实现 常见卷积 习题集 Sum 神犇和蒟蒻 简单的数学题 常见积性函数 μ\muμ φφφ d(n)d(n)d(n):nnn的约数个数 ...

  5. 2019年CCPC - 网络赛E:huntian oy【杜教筛】

    题目: HDU---6706:huntian oy 题意: 给定N,a,b,求下面式子的值(求和后再mod 1e9+7): 分析: 一直怯于杜教筛不敢去学习[一看就会的杜教筛],今天终于迈出了这一步, ...

  6. 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( ...

  7. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

  8. hdu 6706 huntian oy 杜教筛

    传送门 思路: 打表发现 题意可转换成  (a,b互质) 求  与他互质的和为,因为i对应n−i 杜教筛看这里

  9. 杜教筛 狄利克雷卷积入门

    补下暑假的坑 杜教筛看了两天勉勉强强才看懂了一点点 杜教牛逼 杜教筛意义 其实,对于一般的数论题,线性筛已经非常的优秀了. 但是就是有那些duliu出题人,硬是要把数据出到1e10之类的,就看你会不会 ...

最新文章

  1. 微软成功抵御峰值高达 2.4Tbps 的 DDoS 攻击
  2. 给你安利几个牛逼的公众号~
  3. 构建之法阅读笔记之速读篇
  4. eclipse配置PHP自动提示代码
  5. Asp.Net MVC1.0正式版发布
  6. java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...
  7. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
  8. chart控件支持鼠标滚轮放大缩小_强大的鼠标侧键功能设置工具:X-Mouse Button Control...
  9. Struts2的OGNL标签详解
  10. CTFHUB Web题解记录(信息泄露、弱口令部分)
  11. Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~
  12. java 单体 启动优化_java设计优化之单例模式
  13. java ant和maven_JAVA构建工具:Maven与Ant的区别
  14. 基于Java毕业设计游戏销售系统源码+系统+mysql+lw文档+部署软件
  15. excel单元格的合并与计算
  16. 使用exceljs导出部门-职位联动下拉框的excel
  17. 卡特兰数 Catalan number
  18. EfficientNet网络解析
  19. Android Camera旋转角度总结
  20. 虚拟机 邮箱服务器,虚拟机邮箱服务器设置密码

热门文章

  1. 微信小程序之打卡日历
  2. 利用决策树学习基金持仓并识别公司风格类型
  3. 《Mysql技术内幕,Innodb存储引擎》——事物
  4. C语言程序设计教程 北京邮电,C语言程序设计教程第3章_北京邮电大学出版社.ppt...
  5. laravel-admin 省市区三级联动的爬坑问题
  6. 多媒体的一些基本概念
  7. 百度webgis-api-加载卫星影像图
  8. 下载的百度卫星地图如何与谷歌卫星地图叠加
  9. Hadoop HA在停掉active namenode后无法自动切换到standby namenode
  10. vue cli4使用axios(通过RAP2生成后端接口)