题意:以质因数分解的方式给定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的更多相关文章

  1. uva12546. LCM Pair Sum

    uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...

  2. 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 ...

  3. UVA12546_LCM Pair Sum

    题目的意思是求 [西伽马(p+q)]其中lcm(p,q)=n. 又见数论呀. 其实这个题目很简单,考虑清楚了可以很简单的方法飘过. 我一开始是这样来考虑的. 对于每一个单独的质因子,如果为p,它的次数 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. Subarray Sum Closest

    Question Given an integer array, find a subarray with sum closest to zero. Return the indexes of the ...

  6. LeetCode 1099. Two Sum Less Than K

    原题链接在这里:https://leetcode.com/problems/two-sum-less-than-k/ 题目: Given an array A of integers and inte ...

  7. [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 ...

  8. 【LeetCode】1099. Two Sum Less Than K 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 日期 题目地址:https://leetco ...

  9. Java中的泛型 (上) - 基本概念和原理

    本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...

随机推荐

  1. java之平台无关

    java虚拟机是执行字节码文件(.class)的虚拟机进程. java源程序(.java)被编译器编译成------>字节码文件(.class),然后字节码文件,将由java虚拟机,解释成--- ...

  2. 定制 input[type="radio"] 和 input[type="checkbox"] 样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

  3. 使用 Vue.js 2.0+ Vue-resource 模仿百度搜索框

    使用 Vue.js 2.0 模仿百度搜索框 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  4. dubbo见解

    调用关系说明 服务容器负责启动,加载,运行服务提供者. 服务提供者在启动时,向注册中心注册自己提供的服务. 服务消费者在启动时,向注册中心订阅自己所需的服务. 注册中心返回服务提供者地址列表给消费者, ...

  5. 【原创】梵高油画用深度卷积神经网络迭代10万次是什么效果? A neural style of convolutional neural networks

    作为一个脱离了低级趣味的码农,春节假期闲来无事,决定做一些有意思的事情打发时间,碰巧看到这篇论文: A neural style of convolutional neural networks,译作 ...

  6. Unity角色对话

    对话类------------------------------------------------------------------------------------------------- ...

  7. Harbor 学习分享系列1 - centos7.4安装harbor1.5.2

    centos7.4安装harbor1.5.2 前言 本系列分享将Harbor有关教程:分享形式会以百度云盘的形式进行分享,主要教程将以markdown格式进行分享:建议使用markdownpad2这款 ...

  8. ats 安全

    Controlling Access ats可以配置为仅允许某些客户端使用代理缓存. 1. 为ip_allow.config添加一行,以获取允许访问ats的每个IP地址或IP地址范围; 2. traf ...

  9. Kubernetes学习-基础架构

    kubectl是一个Kubernetes提供的客户端工具,是用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具 ...

  10. App Inspector 功能详解

    前言: App Inspector:浏览器端的移动设备 UI 查看器,使用树状态结构查看 UI 布局,自动生成 XPaths 官网:https://macacajs.github.io/app-ins ...