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中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
随机推荐
- LoRa---射频信号接收框架简图介绍
LoRa整体框架图如下: 内容下次再填! 内容补上: 射频信号的接收流程(小博并非专业,错了emmmmm轻喷):射频--->中频--->基带,下面按照图中标的序号开始介绍: 1.天线接受射 ...
- python 回溯法 子集树模板 系列 —— 10、m着色问题
问题 图的m-着色判定问题 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化问题 若一个图最少 ...
- spring 配置 线程池并使用 springtest 进行测试
在 applicationContext.xml 中配置spring线程池: <!-- 包路径扫描 --> <context:component-scan base-package= ...
- H5游戏接微信小游戏的支付,满满的都是坑!
h5小游戏接微信的支付,简直是在为难我胖虎,说多了都是泪. 准备工作: 准备工作一定要做好,不然很容易出错.首先是session_key这个字段,这个session_key是登录的时候需要用到的,根据 ...
- live555学习(一)通读Makefile编译live555
live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...
- LeetCode-3.无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- fabric-sdk-container v1.0-beta 新增支持多服务节点
HyperLedger/Fabric SDK Docker Image 该项目在github上的地址是:https://github.com/aberic/fabric-sdk-container ( ...
- SQL执行结果操作
1. 返回执行结果中的一行 mysql_fetch_row() 返回执行结果的当前行的数值数组,执行这个函数后,结果指向下一行. e.g. $row = mysql_fetch_row($result ...
- git的使用与学习
1.将本地项目推送到Github $ git remote add origin 仓库地址 // 关联远程仓库 $ git push origin master // 推送到远程仓库 如果远程仓库有本 ...
- java实现图像的直方图均衡以及灰度线性变化,灰度拉伸
写了四个方法,分别实现图片的灰度化,直方图均衡,灰度线性变化,灰度拉伸,其中好多地方特别是灰度拉伸这一块觉得自己实现的有问题,请大大们多多指教. import java.awt.Image; impo ...