题目大意

C(M,N) = M! / N! / (M - N)! (组合数)。给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍数,有多少是p的倍数但不是p2的倍数,有多少是p2的倍数但不是p^3的倍数......。

例如:M = 10, P = 2。C(10,0) -> C(10,10)

分别为:1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1。

P的幂 = 1 2 4 8 16......

1 45 45 1 这4个数只能整除1。

10 210 210 10这4个数能整除2但不能整除4。

252 能整除4但不能整除8。

120 120 这2个数能整除8但不能整除16。

所以输出:4 4 1 2。

分析

根据kummer定理,\(C_{n+m}^{n}\)的含的质数p的幂次等于在p进制下n+m的进位次数。

于是数位dp,设\(f[i][j][0/1]\)表示,做到第i位,进了j次位,当前位是否进位的方案数。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <bitset>
#include <set>
#include <vector>
const int inf=2147483647;
const int mo=1e9+7;
const int N=75;
using namespace std;
int T;
long long n,p,f[N][N][2],m,a[N];
int main()
{
for(scanf("%d",&T);T--;)
{
scanf("%lld%lld",&n,&p);
memset(f,0,sizeof(f));
a[0]=0;
for(long long x=n;x;x/=p) a[++a[0]]=x%p;
f[1][0][0]=a[1]+1,f[1][1][1]=p-a[1]-1;
for(int i=1;i<a[0];i++)
for(int j=0;j<=i;j++)
{
f[i+1][j][0]+=(a[i+1]+1)*f[i][j][0]+a[i+1]*f[i][j][1];
f[i+1][j+1][1]+=(p-a[i+1]-1)*f[i][j][0]+(p-a[i+1])*f[i][j][1];
}
for(int i=a[0];i>=0;i--)
if(f[a[0]][i][0])
{
for(int j=0;j<=i;j++) printf("%lld ",f[a[0]][j][0]);
break;
}
putchar('\n');
}
}

【51nod 1245】Binomial Coefficients Revenge的更多相关文章

  1. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  2. 【51Nod 1769】Clarke and math2

    [51Nod 1769]Clarke and math2 题面 51Nod 题解 对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\). 其实题目就是要求\( ...

  3. 51nod 1245 Binomial Coefficients Revenge

    Description C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0), C(M,1)......C(M,M)这M + 1个数中,有多少数不是p的倍 ...

  4. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  5. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

  6. 【51Nod 1622】【算法马拉松 19C】集合对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...

  7. 【51Nod 1616】【算法马拉松 19B】最小集合

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...

  8. 【51Nod 1674】【算法马拉松 19A】区间的价值 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...

  9. 【51nod 1785】数据流中的算法

    Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度.   现有的统计工具只能统计某一个窗口中,用户的满意程 ...

随机推荐

  1. Spring MVCD框架中调用HanLP分词的方法

    项目简要:关于java web的一个项目,用的Spring MVCd 框架.鉴于参与此次项目的人中并不是所人都做的Spring,为了能够提高效率,建议大家是先抛开SPring来写自己负责的模块,最后再 ...

  2. Select 多个表并且相关联转置

    已知一个表的结构为: ------------------- 姓名 科目 成绩 张三 语文 20 张三 数学 30 张三 英语 50 李四 语文 70 李四 数学 60 李四 英语 90   怎样通过 ...

  3. python列表与字符串、元组的区别以及列表引用的方式

    一.字符串 字符串也可以用下标取值.切片.for循环.len()取长度以及 in 和 not in 来进行操作. 但字符串是不可变的,不能被更改.只能构造一个“新的”字符串来存取你想要修改后的数据. ...

  4. 架构设计之CAP定理

    一.什么是 CAP? 「 CAP定理 」又被称为 布鲁尔定理,它提出对于一个分布式系统而言,不能同时满足以下三点: Consisteny(一致性) Availability(可用性) Partitio ...

  5. Springmvc使用注解实现执行定时任务(定时器)

    1.在Spring配置文件中添加 <task:annotation-driven/> 2.在需要调用执行定时任务的类中使用注解 @Service @Lazy(false) //避免spri ...

  6. spring-boot 使用servlet2.5(四)

    环境 jdk 6 tomcat 6.0.53 sts 4.4.2 maven 3.2.5 背景 由于环境限制,还在使用 servlet 2.5,所以需要将 spring boot 进行配置,支持 se ...

  7. Python学习笔记:运算符

    逻辑运算符: +   加 -    减 *    乘 /    除 %  取模-返回除法的余数 **  幂-返回x的y次方 //  整除 比较运算符: ==      等于-比较对象是否相等 !=  ...

  8. 18-Perl 错误处理

    1.Perl 错误处理程序运行过程中,总会碰到各式各样的错误,比如打开一个不存在的文件.程序运行过程中如果出现错误就会停止,我们就需要使用一些检测方法来避免错误,从而防止程序退出.Perl 提供了多中 ...

  9. 9-Perl 条件语句

    1.Perl 条件语句Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块.注意,数字 0, 字符串 '0' . "" , 空 list ( ...

  10. Linux Permission denied 问题

    Linux Permission denied 问题 来源  https://www.cnblogs.com/sparkdev/p/10287164.html 如果当前用户没有某个文件的写权限,又要通 ...