示例#1
0
__int64 gcd(__int64 a, __int64 b) {
   switch (rand() % 3) {
      case 0:  return gcdEU_R(ABS(a), ABS(b));
      case 1:  return gcdEU(ABS(a), ABS(b));
      default: return gcdCN(ABS(a), ABS(b));
   }
}
__int64 gcdEU_R(__int64 a, __int64 b) { //assert: 0 <= min(a, b)
   return (0 == b) ? a : gcdEU_R(b, a % b);
}
示例#3
0
/******************************************************************************************
 * 测试GCD
 ******************************************************************************************/
int main(int argc, char* argv[]) {
// 检查参数
   if (3 > argc) { fprintf(stderr, "Usage: %s <a> <b>\n", argv[0]); return 1; }
   srand((unsigned int)time(NULL));

// 计算GCD
   do {
      __int64 a = _atoi64(argv[1]), b = _atoi64(argv[2]);
      printf("Chinese:   GCD(%22I64d,%22I64d) = %22I64d\n",   a, b, gcdCN(ABS(a), ABS(b)));
      printf("Euclidean: GCD(%22I64d,%22I64d) = %22I64d = %22I64d\n",   a, b, gcdEU(ABS(a), ABS(b)), gcdEU_R(ABS(a), ABS(b)));
      printf("Random:    GCD(%22I64d,%22I64d) = %22I64d = %22I64d\n\n",   a, b, gcd(a, b), gcd(a, b));
      argc -= 2; argv += 2;
   } while (2 < argc);

// 随机计算GCD
   for (int i = 0; i < 9; i++) {
      __int64 a = (__int64)rand()*rand()*rand()*rand(), b = (_int64)rand()*rand()*rand()*rand();
      printf("Chinese:   GCD(%22I64d,%22I64d) = %22I64d\n",   a, b, gcdCN(ABS(a), ABS(b)));
      printf("Euclidean: GCD(%22I64d,%22I64d) = %22I64d = %22I64d\n",   a, b, gcdEU(ABS(a), ABS(b)), gcdEU_R(ABS(a), ABS(b)));
      printf("Random:    GCD(%22I64d,%22I64d) = %22I64d = %22I64d\n\n",   a, b, gcd(a, b), gcd(a, b));
   }

   return 0;
}