一、数论
void gcd(int a,int b,int &d,int &x,int &y) { if(!b) { d=a; x=1; y=0; } else { gcd(b,a%b,d,y,x); y-=x*(a/b); } }
(扩展)欧几里得
//解同余方程 ax≡c(mod b) //转化为ax-by=c void solve() { gcd(a,b,g,x0,y0); if(c%g) printf("no solution"); x=c/g*x0; y=c/g*y0; printf("任意一组解:%d",x); a/=g; b/=g; while(x-b>0) { x-=b; y+=a; } printf("最小x正整数解:%d",x); }
同余方程
扩展欧几里得、同余方程 解析:http://www.cnblogs.com/TheRoadToTheGold/p/6645383.html
int quickmul(int a,int b,int p) { int ans=1; for(;b;b>>=1,a=a*a%p) if(b&1) ans=ans*a%p; return ans; }
快速幂
时间: 2024-12-15 12:14:53