mysql除法的取模运算_带除法的取模运算

type1 $\frac{x}{y}\%P,其中P是大质数$

用费马小小定理得:

$y^{P-1}\equiv 1(mod P)$

故:

$\frac{x}{y}\%P=\frac{x*y^{P-1}}{y}\%P=x*y^{P-2}\%P$

type2 $\frac{x}{y}\%P,其中x和y可分解质因数$

我们还是用一些例子来讲比较好一些。

求卡特兰数$\frac{C_{2n}^{n}}{n+1}\%P$

$\frac{C_{2n}^{n}}{n+1}\%P$

$=\frac{(n+2)\times (n+3)\times ...\times (2n)}{1\times 2\times ...\times (n-1)\times n}\%P$

一个直接的想法是分别将分子和分母分解质因数,但是这样写起来很恶心。

我们这样想:

将$n^{i}$分解质因数:

$n^{i}=(p_{1}^{k_{1}}\times p_{2}^{k_{2}}\times...\times p_{t}^{k_{t}})^i$

我们任取n的一个质因子,不妨为$p_{1}$。

$n=(p_{1})^{i}\times (p_{1}^{k_{1}-1}\times p_{2}^{k_{2}}\times...\times p_{t}^{k_{t}})^{i}$

其实就是$p_{1}$多了i个,$p_{1}^{k_{1}-1}\times p_{2}^{k_{2}}\times...\times p_{t}^{k_{t}}$多了i个。

我们可以交给$p_{1}$和$p_{1}^{k_{1}-1}\times p_{2}^{k_{2}}\times...\times p_{t}^{k_{t}}$做。

如果n本来就是质数,直接快速幂。

找n的质因子可以用线性筛。

下面是bzoj1485代码,就是求$\frac{C_{2n}^{n}}{n+1}\%P$。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include

//#include适用于CF,UOJ,但不适用于poj

using namespacestd;

typedeflong longLL;

typedefdoubleDB;

typedef pairPII;

typedef complexCP;#define mmst(a,v) memset(a,v,sizeof(a))

#define mmcy(a,b) memcpy(a,b,sizeof(a))

#define fill(a,l,r,v) fill(a+l,a+r+1,v)

#define re(i,a,b) for(i=(a);i<=(b);i++)

#define red(i,a,b) for(i=(a);i>=(b);i--)

#define ire(i,x) for(typedef(x.begin()) i=x.begin();i!=x.end();i++)

#define fi first

#define se second

#define m_p(a,b) make_pair(a,b)

#define SF scanf

#define PF printf

#define two(k) (1<inline T sqr(T x){return x*x;}

templateinline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}

templateinline void upmax(T &t,T tmp){if(t

inlineint sgn(DB x){if(abs(x)0)?1:-1;}const DB Pi=acos(-1.0);

inlineintgint()

{int res=0;bool neg=0;charz;for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());if(z==EOF)return 0;if(z=='-'){neg=1;z=getchar();}for(;z!=EOF && isdigit(z);res=res*10+z-'0',z=getchar());return (neg)?-res:res;

}

inline LL gll()

{

LL res=0;bool neg=0;charz;for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());if(z==EOF)return 0;if(z=='-'){neg=1;z=getchar();}for(;z!=EOF && isdigit(z);res=res*10+z-'0',z=getchar());return (neg)?-res:res;

}const int maxN=2000000;intN;LL P;

LL ans;

inline LL power(LL a,LL k){LL x=1,y=a;while(k){if(k&1)x=x*y%P;k>>=1;y=y*y%P;}returnx;}int flag[maxN+100],cnt,prime[maxN+100];int a[maxN+100];

LL b[maxN+100];intmain()

{

freopen("bzoj1485.in","r",stdin);

freopen("bzoj1485.out","w",stdout);inti,j;

cin>>N>>P;

re(i,2,2*N)

{if(!flag[i])prime[++cnt]=i;for(j=1;j<=cnt && i*prime[j]<=2*N;j++)

{

flag[i*prime[j]]=1;

a[i*prime[j]]=prime[j];if(i%prime[j]==0)break;

}

}

re(i,2,N)b[i]=-1;

re(i,N+2,2*N)b[i]=1;

ans=1;

red(i,2*N,2)if(!flag[i])

ans=ans*power(LL(i),b[i])%P;elseb[a[i]]+=b[i],b[i/a[i]]+=b[i];

cout<

}

View Code

type 3

$\frac{a}{b}\%m=\frac{a\%bm}{b}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值