洛咕 P2155 [SDOI2008]沙拉公主的困惑


有个结论,就是如果\(gcd(a,b)=1\),那么\(gcd(a+kb,b)=1\)。证明比较显然。

所以这个题目要问的\(n!\)就可以分成\(\frac{n!}{m!}\)段,每一段和\(m!\)互质的数量都相同,那么显然就是\(\phi(m!)\)

所以答案是\(\frac{n!}{m!}\phi(m!)\)

然后怎么求呢,拆开

\(\frac{n!}{m!}\phi(m!)=\frac{n!}{m!}m!\Pi\frac{p-1}{p}=n\times \Pi\frac{p-1}{p}\)

就是\(m!\)有哪些质因数,显然就是1-m所有数质因数的并,也就是\(\Pi_{i\leq m \text{ and i is prime}}\frac{i-1}{i}\)。

这两个都可以直接预处理,就做完了。。

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int p[10000001],inv[10000001],pr[665000],d[10000001],dd[10000001];
int s[10000001];
bool yes[10000001];
int main(){
#ifndef ONLINE_JUDGE
freopen("1473.in","r",stdin);
freopen("1473.out","w",stdout);
#endif
ll T=gi(),R=gi(),n,m;
for(int i=2;i<=10000000;++i){
if(!yes[i])pr[++pr[0]]=i,d[i]=dd[i]=i;
for(int j=1;1ll*i*pr[j]<=10000000&&j<=pr[0];++j){
yes[i*pr[j]]=1;d[i*pr[j]]=pr[j];
if(i%pr[j]==0){
dd[i*pr[j]]=dd[i];
break;
}
dd[i*pr[j]]=dd[i]*pr[j];
}
}
p[0]=1;for(int i=1;i<=10000000;++i)p[i]=1ll*p[i-1]*i%R;
inv[1]=1;for(int i=2;i<R&&i<=10000000;++i)inv[i]=(R-1ll*(R/i)*inv[R%i]%R)%R;
for(int i=1;i<=pr[0];++i)s[pr[i]]=1ll*(pr[i]-1)*inv[pr[i]]%R;
s[1]=1;
for(int i=2;i<=10000000;++i)
if(s[i]==0)s[i]=s[i-1];
else s[i]=1ll*s[i]*s[i-1]%R;
while(T--){
n=gi(),m=gi();
if(n>R)puts("0");
else printf("%lld\n",1ll*p[n]*s[m]%R);
}
return 0;
}

洛咕 P2155 [SDOI2008]沙拉公主的困惑的更多相关文章

  1. 洛谷 P2155 [SDOI2008]沙拉公主的困惑 解题报告

    P2155 [SDOI2008]沙拉公主的困惑 题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为\(1\)到\(N\)的阶乘,但是,政府只发行编号与\(M!\ ...

  2. [bzoj2186] [洛谷P2155] [Sdoi2008] 沙拉公主的困惑

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  3. P2155 [SDOI2008]沙拉公主的困惑

    \(\color{#0066ff}{ 题目描述 }\) 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大 ...

  4. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  5. 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

  6. BZOJ2186: [Sdoi2008]沙拉公主的困惑(求[1,N!]与M!互素的个数)(线性筛)

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 6103  Solved: 2060[Submit][S ...

  7. BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 5003  Solved: 1725 [Submit] ...

  8. 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

  9. 【bzoj2186】[Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3303  Solved: 1129[Submit][S ...

随机推荐

  1. 去除Xcode6创建工程时自带的storyboard

    去除Xcode6创建工程时自带的storyboard 1. 删除storyboard文件,并在setting里面清空加载storyboard: 2. 导入ViewController到appDeleg ...

  2. Python 系统学习梳理_【All】

    Python学习 1. Python学习---Python安装与基础1205 2. Python学习---PyCharm的使用学习 3. Python学习---Python数据类型1206 4. Py ...

  3. 审计系统---堡垒机python下ssh的使用

    堡垒机python下ssh的使用 [堡垒机更多参考]http://www.cnblogs.com/alex3714/articles/5286889.html [paramiko的Demo实例]htt ...

  4. VMware下 CentOS 连接外网问题(笔记)

    虚拟机连接外网有三种模式.桥接.Nat.Host-Only.三者的区别,详见 实例讲解虚拟机3种网络模式(桥接.nat.Host-only) 使用虚拟机连接外网时,一定要充分考虑本地的网络环境!!! ...

  5. UE4中动画蒙太奇的合成

    在游戏中的技能施法动作是可以通过软件合成的,笔者在这里介绍一种用UE4合成多个动画的操作. 在UE4中角色的动作可以由多种方式达成,一种是混合空间,例如角色的跑动和跳跃,其中的动作是由状态机控制的,原 ...

  6. 【译文】InnoDB 的不同的SQL如何加锁

    http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html 前置:检索如果用不到索引,会扫描全表,并根据策略加锁.所以,这就是我们合理建立 ...

  7. DIV+CSS:如何编写代码才能更有效率

    如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更 ...

  8. PHP microtime() 函数

    定义和用法 microtime() 函数返回当前 Unix 时间戳和微秒数. 语法 microtime(get_as_float) 参数 描述 get_as_float 如果给出了 get_as_fl ...

  9. 2、JVM--Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 2.1.概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高 ...

  10. centos安装swoole

        编译安装swoole: cd && wget https://github.com/swoole/swoole-src/archive/1.8.6-stable.tar.gz  ...