bzoj3114 LCM Pair Sum
题意:以质因数分解的方式给定n,求所有满足:lcm(a, b) = n的无序数对的价值和。其中(a, b)的价值为a + b
解:
定义首项为a,公比为q,项数为n的等比数列的和为getQ(a, q, n)
首先考虑只有一个质因数,例如4。
有如下数对:(1, 4), (2, 4), (4, 4)
可得答案为getQ(1, 2, 2) + 43
然后扩展:6。
对于每个质因数来说:
2: (1, 2), (2, 2)
3: (1, 3), (3, 3)
两两乘起来之后发现:少了一项(2, 3),这是由于我们用的是无序数对。那么改成有序数对试试。
2: 3:
(1, 2) (1, 3)
(2, 1) (3, 1)
(2, 2) (3, 3)
交叉相乘:
(1, 6) (3, 2) (3, 6)
(2, 3) (6, 1) (6, 3)
(2, 6) (6, 2) (6, 6)
发现所有无序数对除了(6, 6)之外都出现了两次,于是补上一个(6, 6)之后/2即可。
现在考虑如何求交叉相乘的表。
设我们的两列数对如下:
(a, b) (e, f)
(c, d) (g, h)
要求的式子:
ae + bf + ag + bh + ce + df + cg + dh
因式分解:
(a + c)(e + g) + (b + d)(f + h)
考虑我们一开始列出来的某一列:
2:
(1, 2)
(2, 1)
(2, 2)
可得:a + c = b + d
故上式 = 2(a + c)(e + g)
推广:
设n = Πaipi,则ans = 2Π{getQ(1, a[i], p[i] + 1) + pi * aipi}
复杂度TmlogV,其中V为指数值域。
#include <cstdio> typedef long long LL;
const int N = ;
const LL MO = 1e9 + ; int a[N], p[N]; inline LL qpow(LL a, LL b) {
LL ans = ;
while(b) {
if(b & ) {
ans = ans * a % MO;
}
a = a * a % MO;
b = b >> ;
}
return ans;
} inline LL getQ(LL a, LL q, LL n) {
a %= MO;
if(!n) {
return 0ll;
}
if(n == || !a || !q) {
return a;
}
if(n == ) {
return (a + a * q % MO) % MO;
}
if(n & ) {
return (a + getQ(a * q % MO, q, n - )) % MO;
}
return (qpow(q, n >> ) + ) * getQ(a, q, n >> ) % MO;
} inline void solve() {
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d%d", &a[i], &p[i]);
}
LL ans = , sum = ;
for(int i = ; i <= n; i++) {
LL temp = qpow(a[i], p[i]) * p[i] % MO;
(temp += getQ(, a[i], p[i] + )) %= MO;
ans = ans * temp % MO;
(sum *= qpow(a[i], p[i])) %= MO;
//printf("temp : %lld \n", temp);
}
//printf("sum = %lld \n", sum);
ans = (ans + sum + sum) % MO;
ans = ans * ((MO + ) >> ) % MO;
printf("%lld\n", ans);
return;
} int main() { int T;
scanf("%d", &T);
for(int i = ; i <= T; i++) {
printf("Case %d: ", i);
solve();
} return ;
}
AC代码
题外话:这东西是我在某个最小割练习题表里面看到的......
bzoj3114 LCM Pair Sum的更多相关文章
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- light oj 1236 - Pairs Forming LCM & uva 12546 - LCM Pair Sum
第一题给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,……em, 则结果为((1+2*e1)*(1+2*e2)……(1+2*em)+1)/2. 代码如下: #include <st ...
- UVA12546_LCM Pair Sum
题目的意思是求 [西伽马(p+q)]其中lcm(p,q)=n. 又见数论呀. 其实这个题目很简单,考虑清楚了可以很简单的方法飘过. 我一开始是这样来考虑的. 对于每一个单独的质因子,如果为p,它的次数 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Subarray Sum Closest
Question Given an integer array, find a subarray with sum closest to zero. Return the indexes of the ...
- LeetCode 1099. Two Sum Less Than K
原题链接在这里:https://leetcode.com/problems/two-sum-less-than-k/ 题目: Given an array A of integers and inte ...
- [LC] 1099. Two Sum Less Than K
Given an array A of integers and integer K, return the maximum S such that there exists i < j wit ...
- 【LeetCode】1099. Two Sum Less Than K 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 日期 题目地址:https://leetco ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
随机推荐
- Windows下的Anaconda+OpenCV的环境配置
Windows下的Anaconda+OpenCV的环境配置
- 【第三课】Centos 7.x系统安装和网络配置以及远程密钥登录
目录 一.安装CentOS 7.3 二.配置网络 1.使用dhclient命令自动获取ip地址 2.使用ip addr或ifconfig命令查看网卡信息 3.使用route命令查看路由信息 4.通过修 ...
- ElasticSearch查询 第三篇:词条查询
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- LeetCode Merge k Sorted Lists (链表)
题意 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- 轻量级直播服务器SRS安装及编译
最近由于公司开发的需要--互动会议,开始研究直播中的技术.由于自身没有接触过虚拟机导致在研究的过程中遇到了很大的问题,首先官方GitHub给出的文档并没有清晰的指出编译是需要通过何种方式进行编译?以下 ...
- spring cloud资料汇总
https://www.cnblogs.com/Java3y/p/9540386.html#commentform --非常好的文章,里面还有海量学习资料
- RabbitMq基础教程之基本概念
RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...
- cocos2d-x学习之路(二)——分析AppDelegate和HelloWorldScene文件
这里我们来看一下cocos自动给我们生成的工程里有些什么东西,并且分析一下这些代码的用途,来为我们以后编写cocos程序铺下基础. 这里我建议看我这份随笔的看官先看看cocos官网的快速入门手册,不然 ...
- 用信鸽来讲解HTTPS的知识
加密是一个很难理解的东西,这里头满是数学证明.不过,除非你是在开发一个加密系统,否则无需了解那些高阶的复杂知识. 如果你看这篇文章是为了创造下一个 HTTPS 协议,很抱歉,请出门左走,鸽子是远远不够 ...
- PHP学习 类型 变量 常数 运算符
PHP支持下列8种类型 标量类型 scalar type整数 integer浮点数 float double布尔 boolean字符串 string 特殊类型 special typeNULL资源 r ...