結果

問題 No.2 素因数ゲーム
ユーザー mudbdbmudbdb
提出日時 2015-06-09 00:45:11
言語 C90
(gcc 11.4.0)
結果
AC  
実行時間 3 ms / 5,000 ms
コード長 1,519 bytes
コンパイル時間 449 ms
コンパイル使用メモリ 28,348 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-08-27 03:49:26
合計ジャッジ時間 1,649 ms
ジャッジサーバーID
(参考情報)
judge11 / judge13
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 1 ms
4,380 KB
testcase_03 AC 0 ms
4,376 KB
testcase_04 AC 1 ms
4,380 KB
testcase_05 AC 1 ms
4,376 KB
testcase_06 AC 1 ms
4,380 KB
testcase_07 AC 1 ms
4,380 KB
testcase_08 AC 1 ms
4,376 KB
testcase_09 AC 3 ms
4,380 KB
testcase_10 AC 3 ms
4,380 KB
testcase_11 AC 2 ms
4,380 KB
testcase_12 AC 2 ms
4,380 KB
testcase_13 AC 3 ms
4,380 KB
testcase_14 AC 1 ms
4,380 KB
testcase_15 AC 2 ms
4,380 KB
testcase_16 AC 2 ms
4,380 KB
testcase_17 AC 3 ms
4,380 KB
testcase_18 AC 3 ms
4,376 KB
testcase_19 AC 2 ms
4,380 KB
testcase_20 AC 3 ms
4,380 KB
testcase_21 AC 3 ms
4,380 KB
testcase_22 AC 3 ms
4,380 KB
testcase_23 AC 2 ms
4,376 KB
testcase_24 AC 3 ms
4,376 KB
testcase_25 AC 3 ms
4,380 KB
testcase_26 AC 2 ms
4,376 KB
testcase_27 AC 2 ms
4,384 KB
testcase_28 AC 2 ms
4,376 KB
testcase_29 AC 2 ms
4,376 KB
testcase_30 AC 2 ms
4,380 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
  int N;
  scanf("%d", &N);

  int sosu_max = ceil(sqrt(N)/2)+2;
  int *sosu = (int*)malloc(sizeof(int)*sosu_max);
  int sosu_n = 0;
  sosu[sosu_n] = 2;
  sosu_n++;
  sosu[sosu_n] = 3;
  sosu_n++;

  int k = sosu[sosu_n-1]+2;
  int i;
  int gousei = 0;
  int end = ceil(sqrt(N));
  while (k <= end) {
    for (i=1; i<sosu_n; i++) {
      if (k % sosu[i] == 0) {
        gousei = 1;
        break;
      }
    }
    if (gousei == 1) {
      gousei = 0;
    } else {
      sosu[sosu_n] = k;
      sosu_n++;
    }

    k+=2;
  }

  struct bunkai {
    int sosu; int sisu;
  };
  int bunkai_max = ceil(log10(N)/log10(2))+1;
  struct bunkai *bunkai
   = (struct bunkai*)malloc(sizeof(struct bunkai)*bunkai_max);
  int bunkai_n = 0;
  int data = N;
  int count;
  for (i=0; i<sosu_n; i++) {
    count = 1;
    while (1) {
      if (data % sosu[i] == 0) {
        if (count == 1) {
          bunkai[bunkai_n].sosu = sosu[i];
          bunkai[bunkai_n].sisu = 1;
          bunkai_n++;
        } else {
          bunkai[bunkai_n - 1].sisu++;
        }
        data /= sosu[i];
        if (data == 1) goto END;
      } else {
        break;
      }
      count++;
    }
  }
  if (data != 1) {
    bunkai[bunkai_n].sosu = data;
    bunkai[bunkai_n].sisu = 1;
    bunkai_n++;
  }
END:
  ;

  int ans = bunkai[0].sisu;
  for (i=1; i<bunkai_n; i++) ans ^= bunkai[i].sisu;
  if (ans == 0) {
    printf("Bob\n");
  } else {
    printf("Alice\n");
  }
  return 0;
}
0