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(i,j)==1)−∑i=1n∑j=1ij(gcd(i,j)==1)=∑i=1niϕ(i)−∑i=1niϕ(i)+(i==1)2=∑i=1niϕ(i)−(i==1)2然后套路地变成求S(n)=∑i=1niϕ(i)g(n)=nϕ(n)这里直接套用杜教筛化简得到g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2f(i)S(ni)(f∗g)(i)=∑d∣nf(d)∗g(nd)=∑d∣nf(d)∗ndϕ(nd)另f(d)=d,则有S(n)=∑i=1ni2−∑i=2iS(ni)然后直接套杜教筛即可。\sum_{i = 1} ^{n} \sum_{j = 1} ^{i}gcd(i ^ a - j ^ a, i ^ b - j ^ b) (gcd(i, j) == 1)\\ = \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} (i - j)(gcd(i, j) == 1) \\ = \sum_{i = 1} ^{n} i\sum_{j = 1} ^{i} (gcd(i, j) == 1) - \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} j (gcd(i, j) == 1)\\ = \sum_{i = 1} ^{n} i \phi(i) - \sum_{i = 1} ^{n} \frac{i \phi(i) + (i == 1)}{2}\\ = \sum_{i = 1} ^{n} \frac{i \phi(i) - (i == 1)}{2}\\ 然后套路地变成求S(n) = \sum_{i = 1} ^{n} i \phi(i)\\ \\g(n) = n \phi(n)\\ 这里直接套用杜教筛化简得到g(1)S(n) = \sum_{i = 1} ^{n} (f*g)(i) - \sum_{i = 2} f(i)S(\frac{n}{i})\\ (f * g)(i) = \sum_{d \mid n} f(d) *g(\frac{n}{d}) = \sum_{d \mid n} f(d) * \frac{n}{d} \phi(\frac{n}{d})\\ 另f(d) =d,则有S(n) = \sum_{i = 1} ^{n} i ^ 2 - \sum_{i = 2} i S(\frac{n}{i})\\ 然后直接套杜教筛即可。 i=1nj=1igcd(iaja,ibjb)(gcd(i,j)==1)=i=1nj=1i(ij)(gcd(i,j)==1)=i=1nij=1i(gcd(i,j)==1)i=1nj=1ij(gcd(i,j)==1)=i=1niϕ(i)i=1n2iϕ(i)+(i==1)=i=1n2iϕ(i)(i==1)S(n)=i=1niϕ(i)g(n)=nϕ(n)g(1)S(n)=i=1n(fg)(i)i=2f(i)S(in)(fg)(i)=dnf(d)g(dn)=dnf(d)dnϕ(dn)f(d)=dS(n)=i=1ni2i=2iS(in)

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e6 + 10, mod = 1e9 + 7, inv2 = 500000004, inv6 = 166666668;int prime[N], cnt;ll phi[N];bool st[N];ll quick_pow(ll a, ll n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;n >>= 1;a = a * a % mod;}return ans;
}void init() {phi[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;phi[i] = i - 1;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}for(int i = 1; i < N; i++) {phi[i] = (1ll * phi[i] * i + phi[i - 1]) % mod;}
}ll calc(int n) {return 1ll * n * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod;
}unordered_map<int, ll> ans_s;ll S(int n) {if(n < N) return phi[n];if(ans_s.count(n)) return ans_s[n];ll ans = calc(n);for(int l = 2, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans - 1ll * (r + l) * (r - l + 1) / 2 % mod * S(n / l) % mod + mod) % mod;}return ans_s[n] = ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T = read();while(T--) {int n = read(), a = read(), b = read();printf("%lld\n", (S(n) - 1 + mod) % mod * inv2 % mod);}return 0;
}

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

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

相关文章

【LOJ#6682】梦中的数论(min_25筛)

【LOJ#6682】梦中的数论 https://www.cnblogs.com/cjyyb/p/11178395.html 利用min_25筛&#xff0c;求解约数个数函数平方的前缀和。

基于.NetCore结合docker-compose实践Gitlab-CI/CD 排坑指南

引言看过docker-compose真香的园友可能留意到当时是【把部署dll文件拷贝到生产机器】&#xff0c;即时打包成镜像并启动容器&#xff0c;并没有完成CI/CD。经过长时间实操验证&#xff0c;终于完成基于Gitlab的CI/CD实践&#xff0c;本次实践的坑位很多&#xff0c; 实操过程尽…

51 NOD 1227 平均最小公倍数(杜教筛)

1227 平均最小公倍数 推式子 S(n)∑i1n∑j1ilcm(i,j)i∑i1n∑j1iijigcd(i,j)∑i1n∑j1ijgcd(i,j)∑i1n∑d1i∑j1ijd(gcd(i,j)d)∑i1n∑d1i∑j1idj(gcd(j,id)1)∑i1n∑d1iidϕ(id)(id1)2∑d1n∑i1ndiϕ(i)(i1)2接下来就是杜教筛求∑i1niϕ(i)了&#xff0c;g(1)S(n)∑i1n(f∗g)…

【BZOJ3512】DZY Loves Math IV(杜教筛)

【BZOJ3512】DZY Loves Math IV&#xff08;杜教筛&#xff09; https://www.cnblogs.com/cjyyb/p/10165338.html

.NET Core很酷,你不得不知

我一直回想我的第一篇博文&#xff0c;那是关于多个服务的服务器平台的详细教程&#xff0c;它使用 GitLab CI 在 AWS 上&#xff0c;当时使用单个命令行进行部署&#xff0c; 至今回想&#xff0c;令人感觉很酷。前几天&#xff0c;我偶然听说一些软件公司的 HR 在招聘原则上拒…

51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)

1363 最小公倍数之和 推式子 ∑i1nlcm(i,n)n∑i1nigcd(i,n)n∑d∣n∑i1nid(gcd(i,n)d)n∑d∣n∑i1ndi(gcd(i,nd)1)n∑d∣ndϕ(d)(d1)2\sum_{i 1} ^{n} lcm(i, n)\\ n\sum_{i 1} ^{n} \frac{i}{gcd(i, n)}\\ n \sum_{d \mid n} \sum_{i 1} ^{n} \frac{i}{d}(gcd(i, n) d)…

【BZOJ3930】选数(莫比乌斯反演倍数形式,杜教筛)

【BZOJ3930】选数 https://www.cnblogs.com/cjyyb/p/8303813.html

程序员修神之路--高并发系统设计负载均衡架构

点击上方“蓝字”关注&#xff0c;酷爽一夏菜菜哥&#xff0c;上次你给我讲的分库分表策略对我帮助很大有帮助就好&#xff0c;上次请我的咖啡也很好喝~呵呵&#xff0c;不过随着访问量的不断加大&#xff0c;网站我又加了nginx做负载均衡好呀&#xff0c;看来要进阶高级工程师…

类欧几里得算法详细推导过程(附带模板)

类欧几里得算法推导 初识 给出三种形式&#xff1a; f(a,b,c,n)∑i0n⌊aibc⌋f(a, b, c, n) \sum_{i 0} ^{n} \lfloor\frac{ai b}{c}\rfloorf(a,b,c,n)∑i0n​⌊caib​⌋g(a,b,c,n)∑i0ni⌊aibc⌋g(a, b, c, n) \sum_{i 0} ^{n}i \lfloor \frac{ai b}{c}\rfloorg(a,b,c…

【Luogu3768】简单的数学题(莫比乌斯反演/杜教筛/欧拉函数)

【Luogu3768】简单的数学题 https://www.cnblogs.com/cjyyb/p/8298339.html

【学习笔记】Docker - 01. Docker是啥

我只是把之前的学习笔记整理一下&#xff0c;贴到这里&#xff0c;可能会显得比较凌乱。。。1.1 啥是Docker?Docker 是一个开源项目&#xff0c;它被用来做构建、打包和运行程序。它是一个命令行程序&#xff0c;一个后台进程&#xff0c;也是一组使用逻辑方法来解决常见软件问…

使用 .NET CORE 创建 项目模板,模板项目,Template

场景&#xff1a;日常工作中&#xff0c;你可能会碰到需要新建一个全新的解决方案的情况&#xff08;如公司新起了一个新项目&#xff0c;需要有全新配套的后台程序&#xff09;&#xff0c;如果公司内部基础框架较多、解决方案需要DDD模式等&#xff0c;那么从新起项目到各种依…

【BZOJ4916】神犇和蒟蒻(杜教筛)

【BZOJ4916】神犇和蒟蒻&#xff08;杜教筛&#xff09; https://www.cnblogs.com/cjyyb/p/8297338.html 杜教筛技巧

E. Number Challenge

E. Number Challenge 推式子 ∑i1a∑j1b∑k1cσ(ijk)∑i1a∑j1b∑k1c∑x∣i∑y∣j∑z∣k(gcd(x,y)1)(gcd(x,z)1)(gcd(y,z)1)∑x1a∑y1b∑z1c⌊ax⌋⌊by⌋⌊cz⌋(gcd(x,y)1)(gcd(x,z)1)(gcd(y,z)1)∑d1aμ(d)∑x1⌊ad⌋⌊adx⌋∑y1⌊bd⌋⌊bdy⌋∑z1c⌊cd⌋(gcd(x,z)1)(gcd(y,z…

时间表(日记)

2021/1/14 今天白天学习还算成功&#xff0c;但是晚饭后拿起手机就开始颓废了&#xff0c;特别是因为听相声实在是无聊而且低俗&#xff0c;所以又忍不住诱惑下载了b站&#xff0c;相比于相声b站的确是有营养的多&#xff0c;但是一旦激起了我的好奇心&#xff0c;尤其是吸引了…

谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

一、前言surging是基于.NET CORE 服务引擎。初始版本诞生于2017年6月份&#xff0c;经过NCC社区二年的孵化&#xff0c;2.0版本将在2019年08月28日进行发布&#xff0c;经历二年的发展&#xff0c;已经全部攘括了微服务架构的技术栈&#xff0c;覆盖了从服务注册、服务发现、中…

2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)

K Sum 推式子 Fn(k)∑l11n∑l21n⋯∑lk1n(gcd(l1,l2,…,lk))2∑d1nd2∑l11nd∑l21nd⋯∑lk1nd(gcd(l1,l2,…,lk)1)∑d1nd2∑l11nd∑l21nd⋯∑lk1nd∑t∣gcd(l1,l2,…,lk)μ(t)∑d1nd2∑t1ndμ(t)(ntd)2另Ttd∑T1n(nT)k∑d∣Td2μ(Td)∑i2nFn(i)∑T1n∑i2k(nT)i∑d∣Td2μ(Td)到…

【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)

【BZOJ4028】[HEOI2015]公约数数列 https://www.luogu.com.cn/problem/P4108 求解最靠前的一个位置前缀gcd和前缀异或的乘积恰好等于x&#xff0c;并且要求支持单点修改 首先我们可以发现这个问题没法使用线段树维护&#xff0c;因为不仅前缀没有单调性&#xff0c;而且修改也…

GuGuFishtion(2018 Multi-University Training Contest 7)

GuGuFishtion 推式子 ∑a1m∑b1nϕ(a,b)ϕ(a)ϕ(b)∑a1m∑b1ngcd(a,b)ϕ(gcd(a,b))∑d1mdϕ(d)∑a1md∑b1mdgcd(a,b)1∑d1mdϕ(d)∑a1md∑b1md∑k∣gcd(a,b)μ(k)我们约定n,m&#xff0c;满足n<m∑d1ndϕ(d)∑k1ndμ(k)⌊nkd⌋⌊mkd⌋\sum_{a 1 } ^{m} \sum_{b 1 } ^{n} …

奇淫巧技-Flutter调用C#

前言众所周知&#xff0c;Xamarin应该是.net下的跨平台开发工具。2016年之前还处于收费状态&#xff0c;后被微软收购后开源。但似乎有个现象&#xff0c;开源后的Xamarin发展似乎有些停滞&#xff0c;而且维护Xamarin的团队又很固执不愿变通。社区多次建议UI层应该统一绘图引擎…