洛谷2257:YY的GCD
时间:2020-01-09
本文章向大家介绍洛谷2257:YY的GCD,主要包括洛谷2257:YY的GCD使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
洛谷2257:YY的GCD
题意描述
- 问\(\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)==p]\),其中\(p\)是所有质数。
- 数据范围\(N,M\leq 10^7\),有\(10000\)组测试数据。
思路:
- 莫比乌斯反演
- 设\(f(d)\)为\(gcd(i,j)==d\)的个数:\(f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]\)。
- \(F(n)\)为\(gcd(i,j)==kn\)的个数,其中\(k=1,2,...\)。
- 有\(F(n)=\sum_{n|d}f(d)=\frac{N}{n}\frac{M}{n}\)。
\(f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)\)。
\(ans=\sum_{p\in primes}\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)==p]\).
\(=\sum_{p\in primes}f(p)\)。
\(=\sum_{p\in primes}\sum_{p|d}\mu(\frac{d}{p})F(d)\).
枚举\(\frac{d}{p}=t\),有
\(=\sum_{p\in primes}\sum_{t=1}^{min\{\frac{N}{p},\frac{M}{p}\}}\mu(t)\frac{N}{tp}\frac{M}{tp}\)。
设\(T=tp\),有:
\(\sum_{p\in primes}\sum_{t=1}^{min\{\frac{N}{p},\frac{M}{p}\}}\mu(t)*\frac{N}{T}\frac{M}{T}\)。
枚举一下\(T\),有:
\(\sum_{T=1}^{min\{N,M\}}\frac{N}{T}\frac{M}{T}\sum_{k|T,k\in primes}\mu(\frac{T}{k})\)。
后面这一项求和可以预处理前缀和\(O(1)\)查询。
前面一项可以通过整除分块优化至\(O(\sqrt{n})\)。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7 + 1e5; int mu[maxn], primes[maxn], cnt; long long sum[maxn], f[maxn]; bool vis[maxn]; void get_mu(int n) { mu[1] = 1; for(int i = 2; i <= n; i++) { if(!vis[i]) { primes[++cnt] = i; mu[i] = -1; } for(int j = 1; primes[j] <= n/i; j++) { vis[primes[j]*i] = 1; if(i % primes[j] == 0) break; else mu[i*primes[j]] = -mu[i]; } } for(int i = 1; i <= cnt; i++) for(int j = 1; primes[i] <= n/j; j++) f[j*primes[i]] += mu[j]; for(int i = 1; i <= n; i++) sum[i] = sum[i-1] + f[i]; } int main() { get_mu(10000000+5); int T; scanf("%d", &T); while(T--) { int n, m; long long ans = 0; scanf("%d%d", &n, &m); if(n > m) swap(n, m); for(int l = 1, r; l <= n; l = r+1) { r = min(n/(n/l), m/(m/l)); ans += 1ll*(1ll*(n/l)*1ll*(m/l) * (sum[r]-sum[l-1])); } printf("%lld\n", ans); } return 0; }
原文地址:https://www.cnblogs.com/zxytxdy/p/12170596.html
- JS魔法堂:不完全国际化&本地化手册 之 实战篇
- scala + intellij idea 环境搭建及编译、打包
- Angular企业级开发(2)-搭建Angular开发环境
- JS魔法堂:不完全国际化&本地化手册 之 拓展篇
- 使用jQuery的animate方法制作滑动菜单
- jenkins 入门教程(下)
- CSS3制作心形头像
- CSS魔法堂:重拾Border之——不仅仅是圆角
- scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归
- java之log4j的配置
- scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
- 使用jQuery封装实用函数
- scala 学习笔记(05) OOP(中)灵活的trait
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RabbitMQ 自动创建队列/交换器/绑定
- SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
- 又一个布局利器, CSS 伪类 :placeholder-shown
- 聊聊微前端的原理和实践
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type xx.xx.xx.xx(实体类具体路径)
- java基础知识点总结
- Ajax详解(拓展:利用Ajax实现用户名的校验)
- Maven学习笔记
- com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout 的解决
- 基于VSFTPD技术与KindEditor的简单案例
- Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
- Nginx技术(附软件分享)
- (必考)关于JS中this关键字的说法,下面错误的是?
- OA项目总结(附程序源码)
- Redis技术(附软件分享)