[BZOJ2186]沙拉公主的困惑
[BZOJ2186]沙拉公主的困惑
题面
大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可。R是一个质数。
Input
第一行为两个整数T,R。R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对整数N,M,见题目描述 m<=n
Output
共T行,对于每一对N,M,输出1至N!中与M!素质的数的数量对R取模后的值
Sample Input
1 11luog
4 2
Sample Output
1
数据范围: 对于100%的数据,1 < = N , M < = 10000000
思路
易证如果\(n\)为\(m\)的倍数,那么\([1,n]\)中和\(m\)互素的数的个数为$\frac {n} {m}\phi(m) \(。那么\)[1,N!]\(中和\)M!\(互素的个数就是\)\frac{N!}{M!}\phi(M!)$。那么预处理出所有数的阶乘。再来考虑解决欧拉函数的处理。
\(\phi(M!)=M!*\frac{\prod_{i=1}^{j}(p_i-1)}{\prod _{i=1}^{j}p_i}\),显然,\(\forall p_i,p_i\leq m\)。那我们前缀和(积)一波就可以了。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define mod r
#define ll long long
#define maxn (int)(1e7+100)
int t,r;
ll factu[maxn];
ll prodd[maxn],produ[maxn];
ll ksm(ll num,ll times){
ll ans = 1 , cur = num % mod;
while( times ) {
if( times & 1 ) ans *= cur , ans %= mod;
cur *= cur , cur %= mod , times >>= 1;
}
return ans;
}
void init(){
factu[1]=1;
for(int i=2;i<maxn;i++){
factu[i]=(ll)factu[i-1]*i;factu[i]%=mod;
}
static bool mark[maxn+1000]={0};
produ[1]=1,prodd[1]=1;
for(int i=2;i<maxn;i++){
produ[i]=produ[i-1];prodd[i]=prodd[i-1];
if(mark[i]){continue;}
produ[i]*=(i-1);produ[i]%=mod;
prodd[i]*=i;prodd[i]%=mod;
for(int j=i;j<maxn;j+=i)mark[j]=1;
}
return;
}
void solve(){
ll n,m;scanf("%lld%lld",&n,&m);
if(n>=mod&&m<mod){puts("0");return;}
ll ans=factu[n];ans%=mod;
ans*=(produ[m]*ksm(prodd[m],mod-2)%mod)%mod;
ans%=mod;
printf("%lld\n",ans);
}
int main(){
//freopen("in","r",stdin);
scanf("%d%d",&t,&r);
init();
while(t--)solve();
return 0;
}
[BZOJ2186]沙拉公主的困惑的更多相关文章
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...
- 【BZOJ2186】沙拉公主的困惑(数论)
[BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...
- 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数
[BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...
- 【bzoj2186】: [Sdoi2008]沙拉公主的困惑 数论-欧拉函数
[bzoj2186]: [Sdoi2008]沙拉公主的困惑 考虑当 gcd(a,b)=1 则 gcd(nb+a,b)=1 所以[1,N!]与M!互质的个数就是 筛出[1,M]所有的素数p[i] 以及逆 ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑_数论
沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...
- BZOJ2186: [Sdoi2008]沙拉公主的困惑(求[1,N!]与M!互素的个数)(线性筛)
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 6103 Solved: 2060[Submit][S ...
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 5003 Solved: 1725 [Submit] ...
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3303 Solved: 1129[Submit][S ...
- bzoj2186【SDOI2008】沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2363 Solved: 779 [id=2186& ...
随机推荐
- 在 ubuntu 下安装 mono 和 xsp4 ,并测试
1. 安装完 ubuntu 后,在 ubuntu 软件中查看是否自带了 mono 运行时和 XSP4,如果没有,则选中后,点击安装按钮. 2. 安装完后,在终端(类似于 Windows 上的命令行工具 ...
- yml 字典列表
观察: --- # 一位职工记录 name: Example Developer job: Developer skill: Elite employed: True foods: - Apple - ...
- Mysql外键约束之CASCADE、SET NULL、RESTRICT、NO ACTION
Mysql中有目前只有InnoDB引擎支持外键约束,InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN ...
- PIESDKDoNet二次开发配置注意事项
在安装完PIESDK进行二次开发的过程中会遇到下面几种常见的开发配置问题,就写一个文档总结一下. 1. 新建项目无PIESDK模板问题 关于新建项目时候,找不到下图中的PIEMainApplic ...
- python--进程初识详解
进程:通俗理解一个运行的程序或者软件,进程是操作系统资源分配的基本单位 1.1.导入进程模块 import multiprocessing 1.2.Process进程类的语法结构如下: Process ...
- 简单实现Shiro单点登录(自定义Token令牌)
1. MVC Controller 映射 sso 方法. /** * 单点登录(如已经登录,则直接跳转) * @param userCode 登录用户编码 * @param token 登录令牌,令牌 ...
- vue-cli的安装及版本查看更新
vue-cli安装 npm install vue-cli -g vue-cli的版本查看 vue -V vue-cli的3.0+以后使用的不是vue-cli了,如果用以上的安装命令安装的并不是最新版 ...
- oracle高级部分
回顾 多表关联查询的方式 内连接 根据AB表关联的条件进行过滤查询,只保留满足条件数据 Select * from a,b where a.xxx=b.xxx; Select * from a inn ...
- jQuery实现的全选、反选和获取当前所有选中的值功能
链接: jQuery实现的全选.反选和获取当前所有选中的值功能 <ul id="list"> <li><label><input type ...
- web攻击日志分析之新手指
0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取 ...