fork(8) download
  1. // X ^ Y - 1 を GMPで求める
  2. //
  3. // gcc -lgmp -O3 でコンパイル
  4. // [参考]
  5. // http://d...content-available-to-author-only...e.jp/pyopyopyo/20090303/p1
  6. // http://t...content-available-to-author-only...e.jp/data/gmplibrary.txt
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #include <gmp.h>
  11.  
  12. // main
  13. int main()
  14. {
  15. unsigned long int xx, yy;
  16. mpz_t result;
  17. clock_t start, end;
  18.  
  19. // init
  20. mpz_init(result);
  21.  
  22. // 入力
  23. fprintf(stderr, "X ^ Y - 1 を求めます。X, Y を \"X^Y\" の形式で入力してください\n :");
  24. scanf("%d^%d", &xx, &yy);
  25. if (xx < 2 || yy < 1) {
  26. fprintf(stderr, "入力エラー\n");
  27. exit(1);
  28. }
  29. // 計算
  30. fprintf(stderr, "計算開始 (%d ^ %d - 1 を求めます)\n", xx, yy);
  31. start = clock();
  32. mpz_ui_pow_ui(result, xx, yy);
  33. mpz_sub_ui(result, result, 1);
  34. end = clock();
  35. fprintf(stderr, "計算終了 (%.3fs)\n", (double) (end - start) / CLOCKS_PER_SEC);
  36.  
  37. // 出力
  38. #if 1
  39. FILE *fp = fopen("res.txt", "w");
  40. mpz_out_str(fp, 10, result);
  41. fclose(fp);
  42. #else
  43. gmp_printf("%Zd", result);
  44. // ※ たいして時間は変わらない
  45. #endif
  46. end = clock();
  47. fprintf(stderr, "出力終了 (%.3fs)\n", (double) (end - start) / CLOCKS_PER_SEC);
  48.  
  49. // 終了
  50. mpz_clear(result);
  51. return 0;
  52. }
  53.  
  54. //
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty