// This program calculates the greatest common factor for two integers. #include #include #include #include #include void factors(void); #define MAX 10000000 unsigned long i,inum,inum1,inum2,istore,j,k; unsigned long num[100],num1[100],num2[100]; double error; int iflag = 0; FILE *pFile[1]; char filename[1][15]; void main() { printf("\n\n gcf.cpp version 1.1 \n"); printf("\n By Tom Irvine Email: tomirvine@aol.com \n"); printf("\n\n This program calculates the greatest common factor for two integers. \n"); printf("\n Enter the first integer \n"); scanf("%ld",&inum1); if(double(inum1) > 2.0e+08) { printf("\n Error: input value is too high.\n"); exit(1); } printf("\n Enter the second integer \n"); scanf("%ld",&inum2); if(double(inum2) > 2.0e+08) { printf("\n Error: input value is too high.\n"); exit(1); } for(i=0; i<100; i++) { num1[i]=0; num2[i]=0; } istore=inum1; factors(); for(i=0; i<100; i++) { num1[i]=num[i]; } istore=inum2; factors(); for(i=0; i<100; i++) { num2[i]=num[i]; } long gcf=1; for(i=0; i<100; i++) { for(j=0; j<100; j++) { if(num1[i] != 0 && num2[j] != 0 ) { if(num1[i] == num2[j] ) { gcf*=num1[i]; num2[j]=0; } break; } } } printf("\n\n Greatest Common Factor = %ld ",gcf); printf("\n\n Calculation complete. \n\n Press any key to exit. \n\n"); getch(); } void factors(void) { inum = istore; for(i=0; i<100; i++) { num[i]=0; } k=0; while(1) { for(i=2; i<= inum/2; i++) { error= (double(inum)/double(i))-double(unsigned long(double(inum)/double(i))); if(fabs(error) < 1.0e-12) { iflag=1; num[k]=i; k++; inum=unsigned long(double(inum)/double(i)); break; } } if(num[0]==istore){iflag=0;} if(iflag==0 || inum <2) { break; } if( i > inum/2 && iflag ==1 ) { num[k]=inum; k++; break; } } if(iflag==0) { printf("\n\n %ld is a prime number. \n",istore); } else { printf("\n\n factors of %ld\n",istore); for(i=0; i