给定两正整数 $a, b$ 。给定序列 $s_0, s_1, \dots, s_n,s_i$ 等于 $1$ 或 $-1$,并且已知 $s$ 是周期为 $k$ 的序列并且 $k\mid (n+1)$,输入只给出序列 $s$ 的前 $k$ 项。

Find out the non-negative remainder of division of $\sum\limits_{i=0}^n s_i a^{n-i}b^i$ by $10^9+9$.

数据范围

$ 1\le n, a, b \le 10^9$
$ 1\le k \le 10^5$

分析

注意到 $10^9 + 9$ 是一个素数,令 $p = 10^9 + 9$ 。
问题可化为等比数列求和。公比为 $q = \left(\dfrac{b}{a}\right)^k$ 。要特别注意 $q = 1 \pmod{p}$ 时等比数列的求和公式不再适用。

比赛时,我第一发提交没有注意到这个点。后来想到这个点,但只想到了 $a = b \pmod{p}$ 的情况。其实这并不是使 $q = 1$ 的唯一情况,至少还有一种情况「$a = - b \pmod {p}$ 且 $k$ 为偶数」也使得 $q = 1$ 。比赛时我没想到这种情况,到快结束时,把用公式求和换成折半求和才通过的。


$1-(\frac{b}{a})^k $ 在模 $p$ 逆元不存在 $\iff$ $1-(\frac{b}{a})^k = 0 \pmod{p}$ $\iff$ $(\frac{b}{a})^k = 1 \pmod{p}$


这一段论证真是太蠢了,被自己给蠢哭了
下面仔细分析一下这个问题
令 $S = \sum\limits_{i=0}^{k-1} s_i a^{n-i}b^i$ 。考虑 $q \ne 1\pmod{p}$ 的情形。
求和公式为
\[
\frac{S(1-(\frac{b}{a})^{n+1})} {1-(\frac{b}{a})^k}
\]

分母 $1-(\frac{b}{a})^k$ 在模 $p$ 下的逆元一定存在吗?

答案是肯定的。假设分母在模 $p$ 下的逆元不存在,即 $p\mid (a^k - b^k)(a^k)^{-1}\iff p\mid (a^k - b^k)$


总结

当意识等比数列求和公式有不适用的情况时,应当进一步问自己,「等比数列求和公式不适用的充要条件是什么?」然后就自然会想到「直接去判断 $\left(\dfrac{b}{a}\right)^k \bmod p$ 是否等于 $1$」 。

CF 964C Alternating Sum的更多相关文章

  1. Codeforces 964C Alternating Sum

    Alternating Sum 题意很简单 就是对一个数列求和. 题解:如果不考虑符号 每一项都是前一项的 (b/a)倍, 然后考虑到符号的话, 符号k次一循环, 那么 下一个同一符号的位置 就是 这 ...

  2. codeforces 963A Alternating Sum

    codeforces 963A Alternating Sum 题解 计算前 \(k\) 项的和,每 \(k\) 项的和是一个长度为 \((n+1)/k\) ,公比为 \((a^{-1}b)^k\) ...

  3. CF963A Alternating Sum

    思路:利用周期性转化为等比数列求和. 注意当a != b的时候 bk * inv(ak) % (109 + 9)依然有可能等于1,不知道为什么. 实现: #include <bits/stdc+ ...

  4. Codeforces 963 A. Alternating Sum(快速幂,逆元)

    Codeforces 963 A. Alternating Sum 题目大意:给出一组长度为n+1且元素为1或者-1的数组S(0~n),数组每k个元素为一周期,保证n+1可以被k整除.给a和b,求对1 ...

  5. [codeforces round#475 div2 ][C Alternating Sum ]

    http://codeforces.com/contest/964/problem/C 题目大意:给出一个等比序列求和并且mod 1e9+9. 题目分析:等比数列的前n项和公式通过等公比错位相减法可以 ...

  6. Codeforces 963A Alternating Sum(等比数列求和+逆元+快速幂)

    题目链接:http://codeforces.com/problemset/problem/963/A 题目大意:就是给了你n,a,b和一段长度为k的只有'+'和‘-’字符串,保证n+1被k整除,让你 ...

  7. zoj 3813 Alternating Sum(2014ACMICPC Regional 牡丹江站网络赛 E)

    1.http://blog.csdn.net/dyx404514/article/details/39122743 思路:题目意思很清楚了,这里只说思路. 设区间[L,R],区间长度为len=(R-L ...

  8. [zoj3813]Alternating Sum 公式化简,线段树

    题意:给一个长度不超过100000的原串S(只包含数字0-9),令T为将S重复若干次首尾连接后得到的新串,有两种操作:(1)修改原串S某个位置的值(2)给定L,R,询问T中L<=i<=j& ...

  9. CF 577B Modulo Sum

    题意:给一个长度为n的正整数序列,问能不能找到一个不连续的子序列的和可以被m整除. 解法:抽屉原理+dp.首先当m<n时一定是有答案的,因为根据抽屉原理,当得到这个序列的n个前缀和%m时,一定会 ...

随机推荐

  1. mongodb索引 全文索引

    全文索引,也叫文本索引,平时,我们百度的搜索,比如api文档的搜索,这种全局的索引就可以使用全文索引实现 全文索引:对字符串与字符串数组创建全文可搜索对索引 使用情况:比如有一个数据集合,存储了用户的 ...

  2. 使用RichTextBox控件保存文件

    实习效果: 知识运用: RichTextBox控件的SaveFile方法 SaveFileDialog对象的ShowDialog方法 实现代码: private void 打开RTF文件ToolStr ...

  3. 解决ssh登录慢,等待时间长的问题

    有时候在ssh远程登录到其他主机上时发现登录时间太长,经过亲自测试,发现主要有两个问题会导致ssh登录慢: 1.使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果 ...

  4. XAMPP安装过程中,出现的问题

    这次运行一个简单的前端(html+css+js+ajax)+php后端项目,运行XAMPP的时候,出现两个问题: phpmyadmin运行不起来,一直报1544错误 请求本地图片及php文件报403错 ...

  5. SpringBoot学习1:创建第一个SpringBoot项目

    一.新建项目 二.打开项目的pom文件,在里面添加maven依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.s ...

  6. MySQL-Xtrabackup备份还原

    前言 通常我们都是使用xtrabackup工具来备份数据库,它是一个专业的备份工具,先来简单介绍下它. Xtrabackup percona提供的mysql数据库备份工具,惟一开源的能够对innodb ...

  7. Nginx 配置支持 WAF

    WAF(Web Application Firewall),中文名叫做“Web应用防火墙” WAF的定义是这样的:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提 ...

  8. PHP静态文件缓存

    ob_start(); 2 echo 'aaa'; 3 $string = ob_get_contents(); 4 file_put_contents('a.html', $string); 5 o ...

  9. Python 正则表达式 search vs match

    search()和match()函数都是正则表达式中的匹配函数,二者有何区别呢? 1.match()从string的开始位置进行正则匹配,即从0位置开始匹配,若匹配上则返回一个match对象,否则返回 ...

  10. 26.VUE学习之--提交表单不刷新页面,事件修饰符之使用$event与prevent修复符操作表单

    提交表单不刷新页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...