UVa 10375 - Choose and divide
2012-09-26 22:36
344 查看
简单的分解质因数约分
#include <cstdio> #include <cstdlib> #include <cstring> const int MAXN = 10000 + 10; bool Prime[MAXN]; int aaa[5]; int bbb[5]; int num[2][MAXN]; void GetPrime() { memset( Prime, true, sizeof(Prime) ); Prime[0] = false ; Prime[1] = false ; for ( int i = 2; i < MAXN; i++ ) if ( Prime[i] ) { for ( int j = i * i; j < MAXN; j += i ) Prime[j] = false; } return; } int cmp( const void *a, const void *b ) { return *(int *)a - *(int *)b; } int max( int a, int b ) { return a > b ? a : b; } int min( int a, int b ) { return a < b ? a : b; } void show() { for ( int i = 0; i < 20; i++ ) printf("%d ", num[0][i]); puts("\n---------------------"); for ( int i = 0; i < 20; i++ ) printf("%d ", num[1][i]); puts("\n----------------"); return; } int main() { GetPrime(); int p, q, r, s; while ( scanf( "%d%d%d%d", &p, &q, &r, &s ) != EOF ) { memset( num, 0, sizeof(num) ); aaa[0] = p; aaa[1] = s; aaa[2] = r - s; bbb[0] = q; bbb[1] = r; bbb[2] = p - q; qsort( aaa, 3, sizeof(int), cmp ); qsort( bbb, 3, sizeof(int), cmp ); // for ( int i = 0; i < 3; i++ ) printf("%d %d\n", aaa[i], bbb[i]); int down, up; for ( int i = 0; i < 3; i++ ) { int xxx; if ( aaa[i] == bbb[i] ) continue; else if ( aaa[i] > bbb[i] ) { down = bbb[i] + 1; up = aaa[i]; xxx = 0; } else { down = aaa[i] + 1; up = bbb[i]; xxx = 1; } for ( int i = down; i <= up; i++ ) { int tp = i; // printf("tp = %d\n", tp); int yyy = 2; while ( tp != 1 ) { if ( Prime[yyy] && tp % yyy == 0 ) { // printf("yyy = %d\n", yyy); tp /= yyy; ++num[xxx][yyy]; } else ++yyy; } } } for ( int i = 2; i < MAXN; i++ ) if ( Prime[i] ) { if ( num[0][i] > num[1][i] ) { num[0][i] -= num[1][i]; num[1][i] = 0; } else { num[1][i] -= num[0][i]; num[0][i] = 0; } } // show(); double ans = 1.0; for ( int i = 2; i < MAXN; i++ ) if ( Prime[i] ) { int fenzi = 1, fenmu = 1; for ( int j = 0; j < num[0][i]; j++ ) fenzi *= i; for ( int j = 0; j < num[1][i]; j++ ) fenmu *= i; ans *= (double)fenzi/fenmu; } printf( "%.5lf\n", ans ); } return 0; }
相关文章推荐
- UVA - 10375 Choose and divide (唯一分解定理)
- UVA 10375 Choose and divide
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- uva 10375 Choose and divide
- UVa 10375 - Choose and divide
- 【暑假】[数学]UVa 10375 Choose and divide
- UVA 10375 Choose and divide 唯一分解定理
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- UVA 10375 Choose and divide
- UVA 10375 Choose and divide
- UVa 10375 Choose and Divide
- UVA - 10375 - Choose and divide (组合数)
- Choose and divide UVA - 10375——埃式筛法+组合数阶乘运算
- UVA 10375 Choose and divide(组合数运算)
- Choose and divide UVA - 10375
- UVA 10375 Choose and divide
- UVA - 10375 Choose and divide 唯一分解定理
- UVa10375 - Choose and divide
- UVA 10375 Choose and divide 计算组合数C(p,q)/C(r,s)。
- UVa 10375 (唯一分解定理) Choose and divide