int main() { int n,x,y,temp; std::vector<int>elem; std::scanf("%d",&n); while( n != 0 ) { x = y = 0; for( int i = 0; i < n; i++ ) { std::scanf("%d",&temp); elem.push_back(temp); } for( size_t i = 0; i < elem.size(); i++ ) for( size_t j = i+1; j< elem.size(); j++ ) { if(common_factor(elem[i],elem[j])== 1) x++; y++; } if( x== 0 ) std::printf("No estimate for this data set.\n"); else std::printf("%0.6lf\n",sqrt(6*y/static_cast<double>(x))); elem.clear(); std::scanf("%d",&n); } return 0; }
/*==================================================================*/ int Csrc::gen_src_filter ( int source0, int target ) { int n; int ncutoff; int mem; int ntaps; int source; int source1, target1; int ncutoff1; source = source0; source1 = source; target1 = source; ntaps = compute_ntaps ( source, target ); n = target / common_factor ( source, target ); mem = n * ntaps; if ( source == target ) src.ncase = 0; else if ( 2 * source == target ) src.ncase = 1; else if ( source < target ) src.ncase = 2; else if ( mem <= 780 ) src.ncase = 3; else src.ncase = 4; if ( src.ncase == 4 ) { source = cascade_factors ( source, target ); if ( source <= 0 ) return 0; // fail target1 = source; } src.ntaps1 = compute_ntaps ( source1, target1 ); src.n1 = target1 / common_factor ( source1, target1 ); src.k1 = source1 / target1; src.m1 = ( src.n1 * source1 - target1 * src.n1 * src.k1 ) / target1; src.totcoef1 = src.ntaps1 * src.n1; ncutoff1 = ( int ) ( 0.90 * src.ntaps1 * target1 / source1 + 0.50 ); if ( ncutoff1 > src.ntaps1 ) ncutoff1 = src.ntaps1; src.ntaps = compute_ntaps ( source, target ); src.n = target / common_factor ( source, target ); src.k = source / target; src.m = ( src.n * source - target * src.n * src.k ) / target; src.totcoef = src.ntaps * src.n; //ncutoff = 0.85*src.ntaps*target/source + 0.50; ncutoff = ( int ) ( 0.90 * src.ntaps * target / source + 0.50 ); //ncutoff = (ncutoff & (~1)) | (src.ntaps & 1); if ( ncutoff > src.ntaps ) ncutoff = src.ntaps; /*-------------------------------------- //if( (src.n < 50) && (source > target) ) //if( (source > target) ) //if( src.ncase == 4 ) { printf("\n%5d to %5d", source0, target); printf(" ncase=%1d", src.ncase); //if( src.ncase == 4 ) { printf("\n %5d to %5d", source0, source); printf(" k+m/n %1d %3d %4d", src.k1, src.m1, src.n1); printf(" taps = %2d", src.ntaps1); printf(" ncoefs %5d", src.totcoef1); printf(" c/o = %2d", ncutoff1); printf("\n %5d to %5d", source, target); } printf(" k+m/n %1d %3d %4d", src.k, src.m, src.n); printf(" taps = %2d", src.ntaps); printf(" ncoefs %5d", src.totcoef); printf(" c/o = %2d", ncutoff); //printf(" minb %3d", src.minbuf); } ------------------------------------*/ // init accum filter delta (down counter wrap if <= 0 src.am = src.n; src.ic = 0; // init src.minbuf = ( int ) ( 1152.0 * source0 / target + ( src.ntaps - 1 ) + 1 ); if ( src.ncase == 4 ) src.minbuf += ( 128 + 4 ); src.am1 = src.n1; src.ic1 = 0; // init src.nbuf = 0; // return failed if not enough memory if ( src.totcoef1 > ( sizeof ( src.coef1 ) / sizeof ( float ) ) ) return 0; if ( src.totcoef > ( sizeof ( src.coef ) / sizeof ( float ) ) ) return 0; gen_f ( src.coef1, src.ntaps1, ncutoff1, src.n1, src.m1 ); gen_f ( src.coef, src.ntaps, ncutoff, src.n, src.m ); //for(i=0;i<n;i++) outf4(src.coef+i*src.ntaps, src.ntaps); return src.minbuf; }
/*==================================================================*/ static int cascade_factors ( int source, int target ) { int i; int cf; int s, t; int fs1, ft1; int fs2, ft2; int ntaps, ncutoff; int source2; int mem; if ( source <= target ) return source; cf = common_factor ( source, target ); s = source / cf; t = target / cf; ft1 = 0; // init to eliminate compiler warning fs1 = 0; for ( i = 7; i < t; i++ ) { if ( s != i * ( s / i ) ) continue; if ( t != ( i + 1 ) * ( t / ( i + 1 ) ) ) continue; fs1 = i; ft1 = i + 1; ft2 = t / ft1; source2 = ft1 * source / fs1; ntaps = compute_ntaps ( source2, target ); mem = ntaps * ft2; if ( mem <= 780 ) break; } if ( fs1 == 0 ) { //printf("\n cascade fail"); return 0; // failed } //printf("\n fs1 ft1 %3d %3d", fs1, ft1); fs2 = s / fs1; ft2 = t / ft1; //printf(" fs2 ft2 %3d %3d", fs2, ft2); source2 = ft1 * source / fs1; ntaps = ( 12 * source2 + target / 2 ) / target; ncutoff = ( int ) ( 0.85 * ntaps * target / source2 + 0.50 ); //printf("\n stage 2 source %5d", source2); //printf(" taps = %3d", ntaps); //printf(" c/o = %3d", ncutoff); mem = ntaps * ft2; //printf(" mem = %3d", mem); return source2; }