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

📄 lllgcd.c

📁 calc大数库
💻 C
📖 第 1 页 / 共 5 页
字号:
					FREEMATI(MATI3);
					MATI3 = M;
				}
			}

			COEFF = SHORTESTX(Q, XX, &count);
if (count>record)
{
			record=count;
			outfile = fopen(buff, "a");
			printf("(i1,i2,i3,i4)=(%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4, record);
			fprintf(outfile, "(i1,i2,i3,i4)=(%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4, record);
			fclose(outfile);
}
			for (j = 0; j < p; j++)
				FREEMPI(XX[j]);
			ffree((char *)XX, p * sizeof(MPI *));
			SIGMA = (MPR **)mmalloc(p * sizeof(MPR *));
			for (j = 0; j < count; j++)
			{
				/*printf("SIGMA[%u]=", j);*/
				for (K = p - 1; K >= 0; K--)
				{
					SUMR = COPYR(elt(LMATRIX, m - 1, K));
					for (r = p - 1; r > K; r--)
					{
						tR2 = COPYR(elt(LMATRIX, r, K));
						tempR = BUILDMPR();
						tempR->N = COPYI(COEFF[j][r]);
						tempR->D = ONEI();
						tR3 = MULTR(tR2, tempR);
						FREEMPR(tempR);
						FREEMPR(tR2);
						tR1 = SUMR;
						SUMR = ADDR(SUMR, tR3);
						FREEMPR(tR1);
						FREEMPR(tR3);
					}
					SIGMA[K] = SUMR;
					/*PRINTR(SIGMA[K]);
					printf(" ");*/
					tempR = BUILDMPR();
					tempR->N = COPYI(COEFF[j][K]);
					tempR->D = ONEI();
					tempR1 = ADDR(tempR, SIGMA[K]);
					tempI = ABSI(tempR1->N);
					e = RSV(tempI, tempR1->D);
					FREEMPR(tempR);
					FREEMPR(tempR1);
					FREEMPI(tempI);
					if (e >= 0)
					{
						fprintf(stderr, "conjecture false:j = %u, K = %d\n", j,  K + 1);
						outfile = fopen(buff, "a"), count;
		fprintf(outfile, "(i1,i2,i3,i4)=(%u,%u,%u,%u): ", i1,i2,i3,i4);
						fprintf(outfile, "conjecture false: j = %u, K = %d\n", j, K + 1);
						fclose(outfile);
						exit (1);
					}
				}
				/*printf("\n");*/
				for (K = 0; K < p; K++)
					FREEMPR(SIGMA[K]);
			}
			ffree((char *)SIGMA, p * sizeof(MPR *));

			ffree((char *)COEFF, GCD_MAX * sizeof(MPI **));
			for (j = 0; j < count; j++)
			{
				ffree((char *)COEFF[j], p * sizeof(MPI *));
				for (i = 0; i < p; i++)
					FREEMPI(COEFF[j][i]);
			}
			FREEMATI(MATI3);
			FREEMATI(Q);
			FREEMATR(LMATRIX);
		}
	}
	}
	}
	}
	return;
}

void GCD3()
/* We print out all shortest multipliers for a[1],a[2],a[3].
 * in the range p1<=a[1]<=q1 etc. and rel prime.
 * The output is sent to gcd3.out.
 */
{
	USI p1, q1, p2, q2, p3, q3;
	USI i1, i2, i3, p;
	USL x, y;
	USI m1, n1, m, n, i, j;
	MPMATI *MATI1, *MATI2, *Q, *M, *MATI3;
	MPI *A, **XX, **X, *Temp;
	MPMATR *LMATRIX;
	char buff[20];
	FILE *outfile;

	printf("Enter alpha=m/n,  1/4 < m/n <= 1:  (ie enter  m  and n)");
	scanf("%u%u", &m1, &n1);
	strcpy(buff, "gcd3.out");
	if(access(buff, R_OK) == 0)
	  unlink(buff);
	printf("Enter  the ranges pi,qi; 2 <= pi < qi < 2^32, i = 1,..3: ");
	scanf("%u%u%u%u%u%u", &p1, &q1, &p2, &q2, &p3, &q3);
	Flush();
	m = 3;
	p = m - 1;
	for (i1 = p1; i1 <= q1; i1++)
	{
	for (i2 = p2; i2 <= q2; i2++)
	{
	for (i3 = p3; i3 <= q3; i3++)
	{
		x = GCDm((USL)i1, (USL)i2);
		y = GCDm(x, (USL)i3);
		if (y == 1)
		{
			MATI1 = BUILDMATI(m, 1);
			MATI1->V[0][0] = CHANGE((USL) i1);
			MATI1->V[1][0] = CHANGE((USL) i2);
			MATI1->V[2][0] = CHANGE((USL) i3);

			m = MATI1->R;
			MATI2 = LLLGCDL(MATI1, &A, m, m1, n1, &LMATRIX);
			FREEMATI(MATI1);
			FREEMPI(A);
			MATI3 = BUILDMATI(1, m);
			for (i = 0;i < m;i++)
				MATI3->V[0][i] = COPYI(MATI2->V[m - 1][i]); 
			p = m - 1;
			XX = (MPI **)mmalloc((USL)(p * sizeof(MPI *)));
			for (j = 0; j < p; j++)
				XX[j] = ZEROI();

			Q = MATI2;
			n = Q->R;
			while (1)
			{
				M = SHORTESTT0(Q, &X);
				for (j = 0; j < p; j++)
				{
					Temp = XX[j];
					XX[j] = ADDI(XX[j], X[j]);
					FREEMPI(Temp);
					FREEMPI(X[j]);
				}
				ffree((char *)X, p * sizeof(MPI *));
				if (M == NULL)
					break;
				else
				{
					for (j = 0; j < Q->C; j++)
					{
						FREEMPI(Q->V[n - 1][j]);
						Q->V[n - 1][j] = COPYI(M->V[0][j]);
					}
					FREEMATI(MATI3);
					MATI3 = M;
				}
			}

			outfile = fopen(buff, "a");
			printf("(i1,i2,i3)=(%u,%u,%u):", i1, i2, i3);
			fprintf(outfile, "(i1,i2,i3)=(%u,%u,%u):", i1, i2, i3);
			printf("(MU[21],MU[31],MU[32]=");
			fprintf(outfile, "(MU[21],MU[31],MU[32]=");
			PRINTR(elt(LMATRIX, 1, 0));
			FPRINTR(outfile, elt(LMATRIX, 1, 0));
			printf(",");
			fprintf(outfile, ",");
			PRINTR(elt(LMATRIX, 2, 0));
			FPRINTR(outfile, elt(LMATRIX, 2, 0));
			printf(",");
			fprintf(outfile, ",");
			PRINTR(elt(LMATRIX, 2, 1));
			FPRINTR(outfile, elt(LMATRIX, 2, 1));
			printf(":\n");
			fprintf(outfile, ":\n");
			fclose(outfile);
			SHORTEST(Q, XX, 4, 1);
			for (j = 0; j < p; j++)
				FREEMPI(XX[j]);
			ffree((char *)XX, p * sizeof(MPI *));
			FREEMATI(MATI3);
			FREEMATI(Q);
			FREEMATR(LMATRIX);
		}
	}
	}
	}
	return;
}

void GCDCONJECTURE6()
/* We test our LLLGCD conjecture for a[1],a[2],a[3],a[4],a[5],a[6] 
 * in the range p1<=a[1]<=q1 etc. and rel prime.
 */
{
	USI p1, q1, p2, q2, p3, q3, p4, q4, p5, q5, p6, q6;
	USI i1, i2, i3, i4, i5, i6, p, record=1;
	USL x, y, z, u, v;
	USI m1, n1, m, n, i, j, count;
	int r, e, K;
	MPMATI *MATI1, *MATI2, *Q, *M, *MATI3;
	MPI *A, **XX, **X, *Temp, ***COEFF, *tempI;
	MPMATR *LMATRIX;
	MPR **SIGMA, *SUMR, *tR1, *tR2, *tR3, *tempR, *tempR1;
	char buff[20];
	FILE *outfile;

	printf("Enter alpha=m/n,  1/4 < m/n <= 1:  (ie enter  m  and n)");
	scanf("%u%u", &m1, &n1);
	strcpy(buff, "conjecture6.out");
	if(access(buff, R_OK) == 0)
	  unlink(buff);
	printf("Enter  the ranges pi,qi; 2 <= pi < qi < 2^32, i = 1,...,6: ");
	scanf("%u%u%u%u%u%u%u%u%u%u%u%u", &p1, &q1, &p2, &q2, &p3, &q3, &p4, &q4, &p5, &q5, &p6, &q6);
	Flush();
	m = 6;
	p = m - 1;
	for (i1 = p1; i1 <= q1; i1++)
	{
	for (i2 = p2; i2 <= q2; i2++)
	{
	for (i3 = p3; i3 <= q3; i3++)
	{
	printf("(i1,i2,i3)=(%u,%u,%u)\n", i1,i2,i3);
	for (i4 = p4; i4 <= q4; i4++)
	{
	for (i5 = p5; i5 <= q5; i5++)
	{
	for (i6 = p6; i6 <= q6; i6++)
	{
/*printf("(i1,i2,i3,i4,i5,i6)=(%u,%u,%u,%u,%u,%u)\n", i1,i2,i3,i4,i5,i6);*/
		x = GCDm((USL)i1, (USL)i2);
		y = GCDm(x, (USL)i3);
		z = GCDm(y, (USL)i4);
		u = GCDm(z, (USL)i5);
		v = GCDm(u, (USL)i6);
		if (v == 1)
		{
			MATI1 = BUILDMATI(m, 1);
			MATI1->V[0][0] = CHANGE((USL) i1);
			MATI1->V[1][0] = CHANGE((USL) i2);
			MATI1->V[2][0] = CHANGE((USL) i3);
			MATI1->V[3][0] = CHANGE((USL) i4);
			MATI1->V[4][0] = CHANGE((USL) i5);
			MATI1->V[5][0] = CHANGE((USL) i6);

			m = MATI1->R;
			MATI2 = LLLGCDL(MATI1, &A, m, m1, n1, &LMATRIX);
			FREEMATI(MATI1);
			FREEMPI(A);
			MATI3 = BUILDMATI(1, m);
			for (i = 0;i < m;i++)
				MATI3->V[0][i] = COPYI(MATI2->V[m - 1][i]); 
			p = m - 1;
			XX = (MPI **)mmalloc((USL)(p * sizeof(MPI *)));
			for (j = 0; j < p; j++)
				XX[j] = ZEROI();

			Q = MATI2;
			n = Q->R;
			while (1)
			{
				M = SHORTESTT0(Q, &X);
				for (j = 0; j < p; j++)
				{
					Temp = XX[j];
					XX[j] = ADDI(XX[j], X[j]);
					FREEMPI(Temp);
					FREEMPI(X[j]);
				}
				ffree((char *)X, p * sizeof(MPI *));
				if (M == NULL)
					break;
				else
				{
					for (j = 0; j < Q->C; j++)
					{
						FREEMPI(Q->V[n - 1][j]);
						Q->V[n - 1][j] = COPYI(M->V[0][j]);
					}
					FREEMATI(MATI3);
					MATI3 = M;
				}
			}

			COEFF = SHORTESTX(Q, XX, &count);
if (count>record)
{
			record=count;
			outfile = fopen(buff, "a");
			printf("(i1,i2,i3,i4,i5,i6)=(%u,%u,%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4,i5,i6, record);
			fprintf(outfile, "(i1,i2,i3,i4,i5,i6)=(%u,%u,%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4,i5,i6, record);
			fclose(outfile);
}
			for (j = 0; j < p; j++)
				FREEMPI(XX[j]);
			ffree((char *)XX, p * sizeof(MPI *));
			SIGMA = (MPR **)mmalloc(p * sizeof(MPR *));
			for (j = 0; j < count; j++)
			{
				/*printf("SIGMA[%u]=", j);*/
				for (K = p - 1; K >= 0; K--)
				{
					SUMR = COPYR(elt(LMATRIX, m - 1, K));
					for (r = p - 1; r > K; r--)
					{
						tR2 = COPYR(elt(LMATRIX, r, K));
						tempR = BUILDMPR();
						tempR->N = COPYI(COEFF[j][r]);
						tempR->D = ONEI();
						tR3 = MULTR(tR2, tempR);
						FREEMPR(tempR);
						FREEMPR(tR2);
						tR1 = SUMR;
						SUMR = ADDR(SUMR, tR3);
						FREEMPR(tR1);
						FREEMPR(tR3);
					}
					SIGMA[K] = SUMR;
					/*PRINTR(SIGMA[K]);
					printf(" ");*/
					tempR = BUILDMPR();
					tempR->N = COPYI(COEFF[j][K]);
					tempR->D = ONEI();
					tempR1 = ADDR(tempR, SIGMA[K]);
					tempI = ABSI(tempR1->N);
					e = RSV(tempI, tempR1->D);
					FREEMPR(tempR);
					FREEMPR(tempR1);
					FREEMPI(tempI);
					if (e >= 0)
					{
						fprintf(stderr, "conjecture false:j = %u, K = %d\n", j,  K + 1);
						outfile = fopen(buff, "a"), count;
		fprintf(outfile, "(i1,i2,i3,i4,i5,i6)=(%u,%u,%u,%u,%u,%u): ", i1,i2,i3,i4,i5,i6);
						fprintf(outfile, "conjecture false: j = %u, K = %d\n", j, K + 1);
						fclose(outfile);
						exit (1);
					}
				}
				/*printf("\n");*/
				for (K = 0; K < p; K++)
					FREEMPR(SIGMA[K]);
			}
			ffree((char *)SIGMA, p * sizeof(MPR *));

			ffree((char *)COEFF, GCD_MAX * sizeof(MPI **));
			for (j = 0; j < count; j++)
			{
				ffree((char *)COEFF[j], p * sizeof(MPI *));
				for (i = 0; i < p; i++)
					FREEMPI(COEFF[j][i]);
			}
			FREEMATI(MATI3);
			FREEMATI(Q);
			FREEMATR(LMATRIX);
		}
	}
	}
	}
	}
	}
	}
	return;
}

void GCDCONJECTURE7()
/* We test our LLLGCD conjecture for a[1],...,a[7] 
 * in the range p1<=a[1]<=q1 etc. and rel prime.
 */
{
	USI p1, q1, p2, q2, p3, q3, p4, q4, p5, q5, p6, q6, p7, q7;
	USI i1, i2, i3, i4, i5, i6, i7, p, record=1;
	USL x, y, z, u, v, w;
	USI m1, n1, m, n, i, j, count;
	int r, e, K;
	MPMATI *MATI1, *MATI2, *Q, *M, *MATI3;
	MPI *A, **XX, **X, *Temp, ***COEFF, *tempI;
	MPMATR *LMATRIX;
	MPR **SIGMA, *SUMR, *tR1, *tR2, *tR3, *tempR, *tempR1;
	char buff[20];
	FILE *outfile;

	printf("Enter alpha=m/n,  1/4 < m/n <= 1:  (ie enter  m  and n)");
	scanf("%u%u", &m1, &n1);
	strcpy(buff, "conjecture7.out");
	if(access(buff, R_OK) == 0)
	  unlink(buff);
	printf("Enter  the ranges pi,qi; 2 <= pi < qi < 2^32, i = 1,...,7: ");
	scanf("%u%u%u%u%u%u%u%u%u%u%u%u%u%u", &p1, &q1, &p2, &q2, &p3, &q3, &p4, &q4, &p5, &q5, &p6, &q6, &p7, &q7);
	Flush();
	m = 7;
	p = m - 1;
	for (i1 = p1; i1 <= q1; i1++)
	{
	for (i2 = p2; i2 <= q2; i2++)
	{
	for (i3 = p3; i3 <= q3; i3++)
	{
/*	printf("(i1,i2,i3)=(%u,%u,%u)\n", i1,i2,i3);*/
	for (i4 = p4; i4 <= q4; i4++)
	{
	for (i5 = p5; i5 <= q5; i5++)
	{
	for (i6 = p6; i6 <= q6; i6++)
	{
	for (i7 = p7; i7 <= q7; i7++)
	{
printf("(i1,i2,i3,i4,i5,i6,i7)=(%u,%u,%u,%u,%u,%u,%u)\n", i1,i2,i3,i4,i5,i6,i7);
		x = GCDm((USL)i1, (USL)i2);
		y = GCDm(x, (USL)i3);
		z = GCDm(y, (USL)i4);
		u = GCDm(z, (USL)i5);
		v = GCDm(u, (USL)i6);
		w = GCDm(v, (USL)i7);
		if (w == 1)
		{
			MATI1 = BUILDMATI(m, 1);
			MATI1->V[0][0] = CHANGE((USL) i1);
			MATI1->V[1][0] = CHANGE((USL) i2);
			MATI1->V[2][0] = CHANGE((USL) i3);
			MATI1->V[3][0] = CHANGE((USL) i4);
			MATI1->V[4][0] = CHANGE((USL) i5);
			MATI1->V[5][0] = CHANGE((USL) i6);
			MATI1->V[6][0] = CHANGE((USL) i7);

			m = MATI1->R;
			MATI2 = LLLGCDL(MATI1, &A, m, m1, n1, &LMATRIX);
			FREEMATI(MATI1);
			FREEMPI(A);
			MATI3 = BUILDMATI(1, m);
			for (i = 0;i < m;i++)
				MATI3->V[0][i] = COPYI(MATI2->V[m - 1][i]); 
			p = m - 1;
			XX = (MPI **)mmalloc((USL)(p * sizeof(MPI *)));
			for (j = 0; j < p; j++)
				XX[j] = ZEROI();

			Q = MATI2;
			n = Q->R;
			while (1)
			{
				M = SHORTESTT0(Q, &X);
				for (j = 0; j < p; j++)
				{
					Temp = XX[j];
					XX[j] = ADDI(XX[j], X[j]);
					FREEMPI(Temp);
					FREEMPI(X[j]);
				}
				ffree((char *)X, p * sizeof(MPI *));
				if (M == NULL)
					break;
				else
				{
					for (j = 0; j < Q->C; j++)
					{
						FREEMPI(Q->V[n - 1][j]);
						Q->V[n - 1][j] = COPYI(M->V[0][j]);
					}
					FREEMATI(MATI3);
					MATI3 = M;
				}
			}

			COEFF = SHORTESTX(Q, XX, &count);
if (count>record)
{
			record=count;
			outfile = fopen(buff, "a");
			printf("(i1,i2,i3,i4,i5,i6,i7)=(%u,%u,%u,%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4,i5,i6,i7, record);
			fprintf(outfile, "(i1,i2,i3,i4,i5,i6,i7)=(%u,%u,%u,%u,%u,%u,%u): record=%u\n", i1,i2,i3,i4,i5,i6,i7, record);
			fclose(outfile);
}
			for (j = 0; j < p; j++)
				FREEMPI(XX[j]);
			ffree((char *)XX, p * sizeof(MPI *));
			SIGMA = (MPR **)mmalloc(p * sizeof(MPR *));
			for (j = 0; j < count; j++)
			{
				/*printf("SIGMA[%u]=", j);*/
				for (K = p - 1; K >= 0; K--)
				{
					SUMR = COPYR(elt(LMATRIX, m - 1, K));
					for (r = p - 1; r > K; r--)
					{
						tR2 = COPYR(elt(LMATRIX, r, K));
						tempR = BUILDMPR();
						tempR->N = COPYI(COEFF[j][r]);
						tempR->D = ONEI();
						tR3 = MULTR(tR2, tempR);
						FREEMPR(tempR);
						FREEMPR(tR2);
						tR1 = SUMR;
						SUMR = ADDR(SUMR, tR3);
						FREEMPR(tR1);
						FREEMPR(tR3);
					}
					SIGMA[K] = SUMR;
					/*PRINTR(SIGMA[K]);
					printf(" ");*/
					tempR = BUILDMPR();
					tempR->N = COPYI(COEFF[j][K]);
					tempR->D = ONEI();
					tempR1 = ADDR(tempR, SIGMA[K]);
					tempI = ABSI(tempR1->N);
					e = RSV(tempI, tempR1->D);
					FREEMPR(tempR);
					FREEMPR(tempR1);
					FREEMPI(tempI);
					if (e >= 0)
					{
						fprintf(stderr, "conjecture false:j = %u, K = %d\n", j,  K + 1);
						outfile = fopen(buff, "a"), count;
		fprintf(outfile, "(i1,i2,i3,i4,i5,i6,i7)=(%u,%u,%u,%u,%u,%u,%u): ", i1,i2,i3,i4,i5,i6,i7);
						fprintf(outfile, "conjecture false: j = %u, K = %d\n", j, K + 1);
						fclose(outfile);
						exit (1);
					}
				}
				/*printf("\n");*/
				for (K = 0; K < p; K++)
					FREEMPR(SIGMA[K]);
			}
			ffree((char *)SIGMA, p * sizeof(MPR *));

			ffree((char *)COEFF, GCD_MAX * sizeof(MPI **));
			for (j = 0; j < count; j++)
			{
				ffree((char *)COEFF[j], p * sizeof(MPI *));
				for (i = 0; i < p; i++)
					FREEMPI(COEFF[j][i]);
			}
			FREEMATI(MATI3);
			FREEMATI(Q);
			FREEMATR(LMATRIX);
		}
	}
	}
	}
	}
	}
	}
	}
	return;
}

void GC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -