Description

曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加
强大的粒子流的神秘装置。超能粒子炮·改相比超能粒子炮,在威力上有了本质的提升。它有三个参数n,k。它会
向编号为0到k的位置发射威力为C(n,k) mod 2333的粒子流。现在SHTSC给出了他的超能粒子炮·改的参数,让你求
其发射的粒子流的威力之和模2333。

Input

第一行一个整数t。表示数据组数。
之后t行,每行二个整数n,k。含义如题面描述。
k<=n<=10^18,t<=10^5

Output

t行每行一个整数,表示其粒子流的威力之和模2333的值。

Sample Input

1
5 5

Sample Output

32

HINT

 

Source

题目大意

  给定$n, k$,求$\sum_{i = 0} ^{k}C_{n}^{i}$模2333的余数。

  显然Lucas。

  $\sum_{i = 0} ^{k}C_{n}^{i}\\ =\sum_{i = 0} ^ {k}C_{n \% p}^{i\% p}C_{\left \lfloor \frac{n}{p}  \right \rfloor}^{\left \lfloor \frac{i}{p} \right \rfloor}\\ =\left (\sum_{i = 0}^{p}C_{n \% p}^{i\% p}  \right )\left ( \sum_{i = 0}^{\left \lfloor \frac{k}{p} \right \rfloor - 1} C_{\left \lfloor \frac{n}{p} \right \rfloor} ^ {\left \lfloor \frac{i}{p} \right \rfloor} \right ) + C_{\left \lfloor \frac{n}{p} \right \rfloor}^{\left \lfloor \frac{k}{p} \right \rfloor}\left ( \sum_{i = 0}^{k \% p}C_{n \% p}^{i} \right )$

  考虑中间的一步可以进行递归计算。又因为$p = 2333$,所以最后一个前缀和可以预处理。

  会出现一个较大的组合数,可以直接用Lucas算。

  其实它可先用Lucas预处理,这样可以少个log。

Code

 /**
* bzoj
* Problem#4591
* Accepted
* Time: 4140ms
* Memory: 44008k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define ll long long const int p = ; ll n, k; int pow2[p + ];
int C[p + ][p + ];
int sc[p + ][p + ]; inline void prepare() {
pow2[] = ;
for (int i = ; i < p; i++)
pow2[i] = (pow2[i - ] << ) % p; C[][] = ;
for (int i = ; i < p; i++) {
C[i][] = C[i][i] = ;
for (int j = ; j < i; j++)
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % p;
} for (int i = ; i < p; i++) {
sc[i][] = ;
for (int j = ; j < p; j++)
sc[i][j] = (sc[i][j - ] + C[i][j]) % p;
}
} inline void init() {
scanf(Auto""Auto, &n, &k);
} int Lucas(ll n, ll k) {
if (!n && !k) return ;
return Lucas(n / p, k / p) * C[n % p][k % p] % p;
} int S(ll n, ll k) {
if (k < ) return ;
return (pow2[n % p] * S(n / p, k / p - ) + Lucas(n / p, k / p) * sc[n % p][k % p]) % p;
} inline void solve() {
printf("%d\n", S(n, k));
} int T;
int main() {
prepare();
scanf("%d", &T);
while (T--) {
init();
solve();
}
return ;
}

bzoj 4591 超能粒子炮·改 - Lucas的更多相关文章

  1. [BZOJ 4591] 超能粒子炮-改

    Link: 传送门 Solution: 记录一下推$\sum_{i=0}^k C_n^i$的过程: 其实就是将相同的$i/p$合起来算,这样每个里面都是一个可以预处理的子问题 接下来递归下去算即可 T ...

  2. bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]

    4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...

  3. 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理

    题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...

  4. P4345 [SHOI2015]超能粒子炮·改 Lucas

    \(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...

  5. [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  6. Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP

    传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...

  7. [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)

    大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...

  8. Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 178  Solved: 70[Submit][Stat ...

  9. BZOJ 4591 【SHOI2015】 超能粒子炮·改

    题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...

随机推荐

  1. sqli-labs(十)(过滤注释符)

    第二十三关: 这关还是一个GET型.字符串.单引符号.的有报错的sql注入,输入?id=1'  ,页面会报错 我们继续按照之前的套路来,先输入?id=1' or '1'='1 页面正常显示,说明这个地 ...

  2. InstallShield :cannot rename directory ...

    InstallShield项目编译的生成目录文件夹需要关闭.

  3. mysql----------阿里云RDS导入导出

    1.这是阿里云rds如何将导出的物理备份文件,导入到自建库里面: https://help.aliyun.com/knowledge_detail/5973700.html?spm=5176.7766 ...

  4. 从0开始搭建vue+webpack脚手架(三)

    在从0开始搭建vue+webpack脚手架(二)中已经基本完成了开发环境的配置.当开发完成后,我们需要将完成的项目进行打包,接下来对打包做一些优化: 运行 $ npm run build 可生成dis ...

  5. System.BadImageFormatException”C#报错

    在平常的开发中或多或少会遇到一些问题,而本次向小编这里是自己刚刚解决的一个问题,贴出来与大家分享一下,纠结了一个下午,终于解决了,是有关平台的一个报错问题.   方法/步骤     报错”“Syste ...

  6. Maximum-SubsequenceSum

    题目 https://pintia.cn/problem-sets/900290821590183936/problems/900291257604861953 给出一段数列,求数列的最大子列和,并输 ...

  7. 8.Thread的join方法

    1.Thread类的join方法表示:当前线程执行结束再执行其它线程!在Thread类中有三个重载的方法分别是: public final synchronized void join(long mi ...

  8. Vue系列之 => 钩子函数生命周期

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. latex 公式 和排版

    http://bbs.chinatex.org/forum.php?mod=viewthread&tid=7423 http://blog.sina.com.cn/s/blog_5e16f17 ...

  10. ★★★kalinux 常用命令

    1.修改密码: sudo  passwd  root 2.重启:reboot ====================================== arch 显示机器的处理器架构(1) una ...