📄 public.h
字号:
long int euclid3(long int a,long int b)
{
unsigned long int f,d,x,y,q,r,x1,x2,y1,y2,c,e;
e=a;
if(a<b)
{
c=a;a=b;b=c;
}
if(b==0)
{
d=a;x=1;y=0;
return y;
}
x2=1;x1=0;y2=0;y1=1;
while(b>0)
{
q=a/b;r=a-(q*b);x=x2-(q*x1);y=y2-(q*y1);
a=b;b=r;x2=x1;x1=x;y2=y1;y1=y;
}
d=a;x=x2;y=y2;
return y;
}
int lamdabeda(int x1,int y1,int x2,int y2,unsigned long int p)
{
int invec(int c,int d);
int lamda,y,z,z1,w1,w,x;
y=(x2-x1);
if(y<0)
{ z=-1*y;
z1=p-(z%p);
}
else
{
z1=y;
}
x=y2-y1;
if(x<0)
{ w1=-1*x;
w=p-(w1%p);
}
else
{
w=x;
}
lamda=(w*invec(z1,p))%p;
return lamda;
}
int lamdasama(int x1,int y1,int a,unsigned long int p)
{
int invec(int c,int d);
int lamda,z;
z=2*y1;
lamda=((3*x1*x1+a)*invec(z,p))%p;
return lamda;
}
int invec(int c,int d)
{
int i;
for(i=1;i<=d;i++)
if(c*i%d==1)
return i;
}
int addecx(int x1,int y1,int x2,int y2,int lamda,unsigned long int p)
{ int invec(int c,int d);
int w2,w3,w4,x3;
w2=lamda*lamda-x1-x2;
if(w2<0)
{ w3=-1*w2;
w4=p-(w3%p);
}
else
w4=w2;
x3=(w4)%p;
return x3;
}
int addecy(int x1,int y1,int x2,int y2,int lamda,unsigned long int p)
{ int invec(int c,int d);
int w2,w3,w4,x3,z1,z2,z3,v,v1,v2,y3;
w2=lamda*lamda-x1-x2;
if(w2<0)
{ w3=-1*w2;
w4=p-(w3%p);
}
else
w4=w2;
x3=(w4)%p;
z1=x1-x3;
/*if(z1<0)
{
z2=-1*z1;
z3=p-(z2%p);
}
else
{z3=z1;}
printf("\n=%d\n", z3);*/
v=lamda*(z1)-y1;
if(v<0)
{
v1=-1*v;
v2=p-(v1%p);
}
else
v2=v;
y3=v2%p;
return y3;
}
unsigned long int pangkat(unsigned long int o,unsigned long int s)
{
if(s==0)
return 1;
else
return o*pangkat(o,s-1);
}
unsigned long int pmod(unsigned long int a,unsigned long int x,unsigned long int n)
{ int aa[100],k,i,j,b,y,z;
unsigned long int M1,M2,M3;
unsigned long int pangkat(unsigned long int o,unsigned long int s);
b=0;
for(k=0;k<20;k++)
{if(x>=pangkat(2,k))
b++;
}
for(k=0;k<b;k++)
{
j=0;
for(i=b-1;i>=0;i--)
{
aa[j]=(x>>i)&1;
j++;
}
}
M1=pangkat(a,2)%n;
if(x==1)
{
return a;
}
if(x==2)
{ printf(" a[0] %lu\n", M1);
return M1;}
if(x==3)
{
M2=M1*a;
return M2%n;
}
else
{
for(i=1;i<b-1;i++)
{
if(aa[i]==1)
{
M2=(M1*a)%n;
M1=pangkat(M2,2)%n;
}
else if(aa[i]==0)
{
M1=pangkat(M1,2)%n;
}
}
if(aa[b-1]==1)
{M1=(M1*a)%n;}
else
{M1=M1;}
return M1;
}
}
unsigned long int gcd(unsigned long int x,unsigned long int y)
{
unsigned long int a,b,r;
if(x<y)
{
a=x;x=y;y=a;
}
r=x%y;
while(r!=0)
{
r=x%y;
x=y;y=r;}
return(x);
}
unsigned long int prima(unsigned long int p)
{ unsigned long int k,j,temp;
k=0;
for (j=1;j<=p;j++)
{
temp=p%j;
if (temp==0)
k=k+1;
}
return k;
}
unsigned long int inv(unsigned long int c,unsigned long int d)
{
unsigned long int i,j;
for(i=1;i<d;i++)
{
j=c*i;
if(j%d==1)
{return i;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -