博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj题解】2186 莎拉公主的困惑
阅读量:4974 次
发布时间:2019-06-12

本文共 1752 字,大约阅读时间需要 5 分钟。

题目。

题意:求\([1,n!]\)中与\(m!\)互质的数的个数,对质数\(R\)取模,\(n\geq m\)。

答案应该等于\(\frac{n!}{m!}\phi(m!)=\frac{n!}{m!}m!\prod_{p|m!}\frac{p-1}{p}=n!\frac{\prod_{p\leq m}\,p-1}{\prod_{p\leq m}\,p}\)。

这里\(p\)为小于等于\(m\)的质数。

所以我们处理出阶乘,以及质数的乘积和对\(R\)的逆元就能得出答案。

你真的这么想?

naive!simple!

如果\(n\geq R\),答案一定为\(0\)吗?

可以看看这组数据:

1 34 3

答案为\(2\),因为\(8\,mod\,3=2\)。

但是\(4!\frac{1\cdot 2}{2\cdot 3}\)呢?\(4!=24\),而\(24\,mod\,3=0\),但是答案非\(0\)。

正确的做法是什么?

当\(n\geq R\)时,如果\(m\geq R\)的话,\(n!\)中的因子\(R\)就有可能被分母消掉,我们应该要对\(n\geq R\)的\(n!\)消掉一个\(R\),对\(m\geq R\)的分母也消掉一个\(R\)。

这样就不会有问题了。

代码如下:

1 #include
2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 #define F2(i,a,b) for(int i=(a);i<(b);++i) 4 int T,Mod,n,m; 5 int primes[664580], pnum=0; 6 bool isn_prime[10000001]; 7 int pi[664580],inv[10000001]; 8 int in[664580],fct[10000001]; 9 int pos[10000001];10 void init(){11 isn_prime[0]=isn_prime[1]=1;12 F(i,2,10000000){13 if(!isn_prime[i]) primes[++pnum]=i;14 for(int j=1;j<=pnum&&primes[j]*i<=10000000;++j){15 isn_prime[primes[j]*i]=1;16 if(i%primes[j]==0) break;17 }18 }19 inv[1]=1; for(int i=2;i
<=10000000;++i)20 inv[i]=1ll*(Mod-Mod/i)*inv[Mod%i]%Mod;21 pi[0]=1; F(i,1,pnum) pi[i]=1ll*pi[i-1]*(primes[i]-1)%Mod;22 in[0]=1; F(i,1,pnum) if(primes[i]!=Mod) in[i]=1ll*in[i-1]*inv[primes[i]%Mod]%Mod; else in[i]=in[i-1];23 fct[0]=1; F(i,1,10000000) if(i!=Mod) fct[i]=1ll*fct[i-1]*i%Mod; else fct[i]=fct[i-1];24 F(i,2,10000000) if(isn_prime[i]) pos[i]=pos[i-1]; else pos[i]=pos[i-1]+1; 25 }26 int main(){27 scanf("%d%d",&T,&Mod);28 init();29 while(T--){30 scanf("%d%d",&n,&m);31 if(n>=Mod&&m

 

转载于:https://www.cnblogs.com/PinkRabbit/p/8166797.html

你可能感兴趣的文章
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
centos iptables
查看>>
unity3d 移动与旋转 2
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>