题目链接

  数论果然是硬伤qwq  还是智商上的硬伤

  我们来讲两个道理

  No.1  求1~i!中与i!互质的数的个数

  实际上就是求i!的欧拉函数

  有如下递推式:

  f[1]=1

  if(i为合数)  f[i]=f[i-1]*i;

  if(i为素数)  f[i]=f[i-1]*(i-1);

  证明如下

  首先我们有个神奇引理。叫做:如果n=p1a1*p2a2*………………*pkak是n的素数幂乘积表达式,那么有

  $phi[n]=n*\frac{p1-1}{p1}*\frac{p2-1}{p2}*……*\frac{pk-1}{pk}$

  所以说我们的$phi[n!]=n!*\frac{p1-1}{p1}*\frac{p2-1}{p2}*……*\frac{pk-1}{pk}$

  那么首先我们知道n!是从1乘到n(废话)

  那么注意(敲黑板)phi[n]的质因子就是1到n里的质数对不对

  我们现在就把所有的分母约掉

  所以phi[n]就变成了(所有合数的乘积)*(所有质数-1的乘积)

  于是递推式得证

  然后第二个问题,就是如果gcd(a,b)==1,那么gcd(a*k+b,b)=1

  这个东西有什么用呢?

  我们设n!为mul[n]。

  由于n>=m,所以mul[n]>=mul[m],并且mul[n]一定是mul[m]的整数倍。

  这样我们发现$mul[n]=mul[m]*\frac{mul[n]}{mul[m]}$

  所以说1到mul[n]中和mul[m]互质的,就等于1~mul[m]中与mul[m]互质的,再乘上$\frac{mul[n]}{mul[m]}$

  然后逆元乱搞搞就好了qwq

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cstdlib>
#define maxn 10000020 inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} bool s[maxn];
int prime[maxn],tot;
int mul[maxn];
int f[maxn]; long long Pow(long long n,int x,int p){
long long ans=;
while(x){
if(x&) ans=(ans*n)%(long long)p;
n=(n*n)%(long long)p;
x>>=;
}
return ans;
} int main(){
int T=read(),p=read();
s[]=mul[]=f[]=;
for(int i=;i<=maxn;++i){
if(!s[i])
prime[++tot]=i;
for(int j=;j<=tot&&(long long)prime[j]*i<=maxn;++j){
s[i*prime[j]]=;
if(!(i%prime[j])) break;
}
}
for(int i=;i<=maxn;++i){
mul[i]=((long long)mul[i-]*(long long)i)%(long long)p;
if(s[i]) f[i]=((long long)f[i-]*(long long)i)%(long long)p;
else f[i]=((long long)f[i-]*(long long)(i-))%(long long)p;
}
while(T--){
int n=read(),m=read();
printf("%lld\n",(long long)(((long long)f[m]*(long long)mul[n])%(long long)p*Pow(mul[m],p-,p))%p);
}
return ;
}

最新文章

  1. google书签找回
  2. js代码生成form,解决mvc的url参数过长问题
  3. EMC Documentum DQL整理(二)
  4. python多线程之Event(事件)
  5. Java数组的--遍历
  6. perl常见符号
  7. Node.js 项目搭建
  8. 窥探EasyMock(2)进阶使用篇
  9. 活动 Activity 四种加载模式
  10. 10. 混淆矩阵、总体分类精度、Kappa系数
  11. [TYVJ] P1065 津津的储蓄计划
  12. iOS申请真机调试证书 -- 图文详解
  13. HDU 3416 Marriage Match IV(最短路,网络流)
  14. Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
  15. 梯度下降(gradient descent)算法简介
  16. Netbeans异常之cannet locate java installation in specified jdkhome
  17. JavaScript -基础- 函数与对象(四) BOM 对象
  18. mysql的索引设计原则以及常见索引的区别
  19. python-多线程和线程池
  20. Codding.net 与 Visual Studio 项目的创建和上传 push 403错误

热门文章

  1. MFC【exe】工程中的文件大致信息(翻译的)
  2. 将SQL2008升级为SQL2008 r2
  3. line-block,white-space,overflow
  4. 使用MySQL yum源安装MySQL
  5. 在 Ubuntu 环境下实现插入鼠标自动关闭触摸板
  6. Applied Nonparametric Statistics-lec7
  7. poj 2531 分权问题 dfs算法
  8. 笔记-python-urllib
  9. Centos7 install Openstack Juno (RDO) (转载)
  10. Java监听器Listener使用说明