刷题总结——分糖(ssoj 容斥原理+逆元+快速幂+组合数求插板)
题目:
题目描述
有 N 个(相同的)糖果,M 个(不同的)小朋友。M 和 N 满足:1≤M≤N≤100000(105)。
要求:
1.每个小朋友都至少有一个糖果。
2.不存在正整数 X(X>=2),使得每个小朋友的糖果数都是 X 的倍数。
3.糖果不能剩余。
求分糖方法总数。答案模 1000000007(109+7)
输入格式
第一行为数据组数:T<=100000。
接下来 N 行,每行 2 个如上文所示的正整数 N,M。
输出格式
输出 T 行,每行一个整数,为答案。
注意取模!
样例数据 1
备注
【数据范围】
对于 30% 的数据:1<=M<=N<=20
对于 60% 的数据:1<=M<=N<=1000
对于 100% 的数据:1<=M<=N<=100000
题解:
一道题充分证明我在数论上是个sb
首先第一次学到用dfs来求充斥,涨姿势了····
然后就是用组合数来解决将x个糖分到y个小朋友手里的问题····相当于在x-1个空格中插入y-1个板子···转化成组合数···
最后一个问题就是组合数每次肯定只能通过预处理的阶乘相处来求··然而阶乘已经取模···相当于如何计算a/bmodp的问题····
不难想到a/b相当于a*1/b,而1/b%p就是b模p的逆元····且p为质数的情况下逆元直接等于b的p-2次方模p,用快速幂来求即可
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e5+;
const int mod=1e9+;
vector<int>zhiyinzi[N];
long long jc[N],T,n,m,ans,niyuan[N];
bool notprime[N];
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f;
}
inline long long ksm(long long a,long long b)
{
long long temp=;
while(b)
{
if(b%==) temp=(temp*a)%mod;
b/=;
a=(a*a)%mod;
}
return temp;
}
inline void pre()
{
for(int i=;i<=;i++)
{
if(!notprime[i])
{
zhiyinzi[i].push_back(i);
for(int j=;j*i<=;j++)
{
notprime[i*j]=true;
zhiyinzi[i*j].push_back(i);
}
}
}
jc[]=;
for(int i=;i<=;i++) jc[i]=(jc[i-]*i)%mod;
for(int i=;i<=;i++) niyuan[i]=ksm(jc[i],mod-);
}
inline int calc(int a,int b)
{
if(a<b) return ;
return ((long long)(jc[a-]*niyuan[b-])%mod*niyuan[a-b])%mod;
}
inline void dfs(int u,int tot,int f)
{
if(u==zhiyinzi[n].size())
{
ans=(ans+f*calc(n/tot,m))%mod;
return;
}
dfs(u+,tot*zhiyinzi[n][u],-f);
dfs(u+,tot,f);
}
int main()
{
//freopen("a.in","r",stdin);
pre();T=R();
while(T--) {
ans=;n=R(),m=R();
dfs(,,);
cout<<(((ans%mod)+mod)%mod)<<endl;
}
return ;
}
刷题总结——分糖(ssoj 容斥原理+逆元+快速幂+组合数求插板)的更多相关文章
- 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
原题:ZOJ 3774 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3774 --------------------- ...
- 牛客网 牛客小白月赛1 I.あなたの蛙が帰っています-卡特兰数,组合数阶乘逆元快速幂
I.あなたの蛙が帰っています 链接:https://www.nowcoder.com/acm/contest/85/I来源:牛客网 这个题有点意思,是卡特兰数,自行百度就可以.卡特兰数用处 ...
- HDU 5793 A Boring Question (逆元+快速幂+费马小定理) ---2016杭电多校联合第六场
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- Gym - 101775A Chat Group 组合数+逆元+快速幂
It is said that a dormitory with 6 persons has 7 chat groups ^_^. But the number can be even larger: ...
- ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)
Problem Description As we know, sequence in the form of an=a1+(n−1)d is called arithmetic progressio ...
- 牛客网 Wannafly挑战赛11 B.白兔的式子-组合数阶乘逆元快速幂
链接:https://www.nowcoder.com/acm/contest/73/B来源:牛客网 B.白兔的式子 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K, ...
- 51nod-1119 1119 机器人走方格 V2(组合数学+乘法逆元+快速幂)
题目链接: 1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很 ...
随机推荐
- jQuery工作中遇到的几个插件
图片上传插件:uploadify 表单验证插件:formValidator
- javaweb基础(10)_HttpServletRequest原理介绍
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- 关于flyme5显示不到和卸载不到旧应用解决方法
笔者买入一台mx5,升级flyme5后旧应用没有显示出来,而且在设置的应用管理都没显示旧应用. 通过adb命令: adb shell pm list packages显示所有包名, 查看自己要删除应用 ...
- 【二分 最大流】bzoj1532: [POI2005]Kos-Dicing
晚上果然不适合调题目 Description Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评选出 ...
- MySQL数据库主从切换脚本自动化
MySQL数据库主从切换脚本自动化 本文转载自:https://blog.csdn.net/weixin_36135773/article/details/79514507 在一些实际环境中,如何实现 ...
- centos里没有pip命令怎么办?
刚刚入门python的嘛,然后这个centos也是不是那么熟悉!! pip在centos也没有,所以网上找来资料,3条语句就搞定啦! 1.查看是否安装依赖包,没安装先安装: yum install e ...
- python入门:1-99所有数的和附带等式
#!/usr/bin/env python # -*- coding:utf-8 -*- #1-99所有数的和的等式 #start(开始,译音:思达二测)sum(合计,译音:桑木)temp(临时雇员, ...
- 第7课 Thinkphp 5 模板输出变量使用函数 Thinkphp5商城第四季
目录 1. 手册地址: 2. 如果前面输出的变量在后面定义的函数的第一个参数,则可以直接使用 3. 还可以支持多个函数过滤,多个函数之间用"|"分割即可,例如: 4. 变量输出使用 ...
- Head First Python (二)
if...else... 1 movies = ["The Holy Grail",1975,"Terry Jones & Terry Gilliam" ...
- poj 3616 奶牛产奶问题 dp算法
题意:奶牛产奶,农夫有m个时间段可以挤奶,在工作时间 f t 内产奶量为m,每次挤完奶后,奶牛需要休息R.问:怎么安排使得产奶量最大? 思路:区间dp dp[i]表示第i个时段 对农夫工作的结束时间 ...