u.y=c1.y(c2.y-c1.y)*t;
v.x=u.xc1.y-c2.y;
v.y=u.y-c1.xc2.x;
intersection_line_circle(c1,r1,u,v,p1,p2);
}
//求阶乘最后非零位,复杂度O(nlogn)
//返回该位,n以字符串方式传入
#include <string.h>
#define MAXN 10000
int lastdigit(char* buf){
constint mod[20]={1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};
intlen=strlen(buf),a[MAXN],i,c,ret=1;
if(len==1)
return mod[buf[0]-'0'];
for(i=0;i<len;i)
a[i]=buf[len-1-i]-'0';
for(;len;len-=!a[len-1]){
ret=ret*mod[a[1]%2*10a[0]]%5;
for (c=0,i=len-1;i>=0;i--)
c=c*10a[i],a[i]=c/5,c%=5;
}
returnretret%2*5;
}
#ifdef WIN32
typedef __int64 i64;
#else
typedef long long i64;
#endif
//扩展Euclid求解gcd(a,b)=axby
int ext_gcd(int a,int b,int& x,int&y){
intt,ret;
if(!b){
x=1,y=0;
return a;
}
ret=ext_gcd(b,a%b,x,y);
t=x,x=y,y=t-a/b*y;
returnret;
}
//计算m^a, O(loga), 本身没什么用, 注意这个按位处理的方法:-P
int exponent(int m,int a){
intret=1;
for(;a;a>>=1,m*=m)
if (a&1)
ret*=m;
returnret;
}
//计算幂取模a^b mod n, O(logb)
int modular_exponent(int a,int b,int n){//a^b mod n
intret=1;
for(;b;b>>=1,a=(int)((i64)a)*a%n)
if (b&1)
ret=(int)((i64)ret)*a%n;
returnret;
}
//求解模线性方程ax=b (mod n)
//返回解的个数,解保存在sol[]中
//要求n>0,解的范围0..n-1
int modular_linear(int a,int b,int n,int*sol){
intd,e,x,y,i;
d=ext_gcd(a,n,x,y);
if(b%d)
return 0;
e=(x*(b/d)%nn)%n;
for(i=0;i<d;i)
sol[i]=(ei*(n/d))%n;
returnd;
}
//求解模线性方程组(中国余数定理)
// x= b[0] (mod w[0])
// x= b[1] (mod w[1])
//...
// x= b[k-1] (mod w[k-1])
//要求w[i]>0,w[i]与w[j]互质,解的范围1..n,n=w[0]*w[1]*...*w[k-1]
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34960-40.html
敢于鼓足勇气对美国说关你鸟事
找过期商品吧