刷题总结——分糖(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的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很 ...
随机推荐
- Tarjan 详解
Tarjan 算法 一.算法简介 Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度. 我们定义: 如果两个顶点可以相互通达,则称两个顶点强连 ...
- fence_vmware_soap UnicodeEncodeError
执行如下命令 fence_vmware_soap -z -l administrator@vsphere.local -p 2wsx@QAZ -a 10.0.2.200 -o list --ssl-i ...
- java基础—注解annotation
一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...
- iOS中的数据存储方式_SQLite3
优点: 1) SQLite是一款轻型的嵌入式数据库; 2) 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 3) 它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还 ...
- 洛谷 P1516 青蛙的约会
https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...
- numpy 三个点的使用[...]
numpy [...]语法简单使用 Python numpy中切片功能与列表切片类似,但功能更加强大 本文主讲numpy中[...]的简单使用,后续工作继续补充. import numpy >& ...
- Python爬虫一
爬虫 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应, 一种按照一定的规则,自动地抓取互联网信息的程序. 原则上,只要是浏览器(客户端)能做的事情,爬虫 ...
- leetcode-12-stack
409. Longest Palindrome Given a string which consists of lowercase or uppercase letters, find the le ...
- MySQL安装与配置介绍
MySQl介绍 官方站点:http://www.mysql.com/ MySQL是一个开放源码的小型关联式数据库管理系统.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速 ...
- Linux学习-账号管理
新增与移除使用者: useradd, 相关配置文件, passwd, usermod, userdel 我们登入系统时会输入 (1)账号与 (2)密码,所以建立一个可用的账号同样的也需要这两个数据.那 ...