【Luogu】P2155沙拉公主的困惑(数论)
2024-09-04 17:34:00
数论果然是硬伤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 ;
}
最新文章
- google书签找回
- js代码生成form,解决mvc的url参数过长问题
- EMC Documentum DQL整理(二)
- python多线程之Event(事件)
- Java数组的--遍历
- perl常见符号
- Node.js 项目搭建
- 窥探EasyMock(2)进阶使用篇
- 活动 Activity 四种加载模式
- 10. 混淆矩阵、总体分类精度、Kappa系数
- [TYVJ] P1065 津津的储蓄计划
- iOS申请真机调试证书 -- 图文详解
- HDU 3416 Marriage Match IV(最短路,网络流)
- Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
- 梯度下降(gradient descent)算法简介
- Netbeans异常之cannet locate java installation in specified jdkhome
- JavaScript -基础- 函数与对象(四) BOM 对象
- mysql的索引设计原则以及常见索引的区别
- python-多线程和线程池
- Codding.net 与 Visual Studio 项目的创建和上传 push 403错误