帶除法的取模運算

2022-05-15 06:06:02 字數 2738 閱讀 3888

type1 $\frac\%p,其中p是大質數$

用費馬小小定理得:

$y^\equiv 1(mod p)$

故:$\frac\%p=\frac}\%p=x*y^\%p$

type2 $\frac\%p,其中x和y可分解質因數$

我們還是用一些例子來講比較好一些。

求卡特蘭數$\frac^}\%p$

$\frac^}\%p$

$=\frac\%p$

乙個直接的想法是分別將分子和分母分解質因數,但是這樣寫起來很噁心。

我們這樣想:

將$n^$分解質因數:

$n^=(p_^}\times p_^}\times...\times p_^})^i$

我們任取n的乙個質因子,不妨為$p_$。

$n=(p_)^\times (p_^-1}\times p_^}\times...\times p_^})^$

其實就是$p_$多了i個,$p_^-1}\times p_^}\times...\times p_^}$多了i個。

我們可以交給$p_$和$p_^-1}\times p_^}\times...\times p_^}$做。

如果n本來就是質數,直接快速冪。

找n的質因子可以用線性篩。

下面是bzoj1485**,就是求$\frac^}\%p$。

#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

namespace

std;

typedef

long

long

ll;typedef

double

db;typedef pair

pii;

typedef complex

cp;#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)

template

inline void upmin(t &t,t tmp)

template

inline void upmax(t &t,t tmp)

const db eps=1e-9

;inline

int sgn(db x)

const db pi=acos(-1.0

);inline

intgint()

for(;z!=eof && isdigit(z);res=res*10+z-'

0',z=getchar());

return (neg)?-res:res;

}inline ll gll()

for(;z!=eof && isdigit(z);res=res*10+z-'

0',z=getchar());

return (neg)?-res:res;

}const

int maxn=2000000

;int

n;ll p;

ll ans;

inline ll power(ll a,ll k)return

x;}int flag[maxn+100],cnt,prime[maxn+100

];int a[maxn+100

];ll b[maxn+100

];int

main()

}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;

else

b[a[i]]+=b[i],b[i/a[i]]+=b[i];

cout

return0;

}

view code

type 3

$\frac\%m=\frac$

除法的取模運算

逆元 若,b b1 c 1 則,b1稱為b模c的乘法逆元。在acm中,許多除法取模都要用到求逆元。但是,逆元,為什麼能給我們帶來 a b c a b1 c 當然a b要整除 要知道,取模等式等價變形中,是沒有除法的!而推導式,還是沒有用除法的地方!我們用反證法證明 若b b1 c 1,則 a b c...

JS的乘法,除法,取模,加法,減法運算

一 乘法運算 如果運算數都是數字,執行常規的乘法運算。如果結果太大或太小,那麼生成的結果就是infinity 或 infinity 1 如果某個運算數是nan 結果為 nan 2 infinity乘以 0,結果為 nan 3 infinity乘以 0以外的數字,結果為 infinity 或 infi...

多項式除法 取模

除法 取模 設 n 次多項式 f x 和 m 次多項式 g x 求 n m 次多項式 q x 和 m 1 次多項式 r x 滿足 f x g x q x r x 於是我們有 f frac g frac q frac r frac 兩遍同乘 x n x nf frac x mg frac x q fr...