⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 public.h

📁 this is source code of public key
💻 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 + -