結果

問題 No.2 素因数ゲーム
ユーザー uenokuuenoku
提出日時 2016-08-24 23:53:38
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 6,119 bytes
コンパイル時間 1,123 ms
コンパイル使用メモリ 100,252 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-08 02:11:27
合計ジャッジ時間 2,775 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <queue>
#include "math.h"
#include <complex>
#include <iomanip>
#include <map>
#define ifor(i,a,b) for (int i=(a);i<(b);i++)
#define rfor(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define rep(i,n) for (int i=0;i<(n);i++)
#define rrep(i,n) for (int i=(n)-1;i>=0;i--)
using namespace std;
typedef long double ld;
typedef long long int  lli;
typedef complex <double> P;
const double eps = 1e-11;
int vex[4]={1,0,-1,0};
int vey[4]={0,1,0,-1};
typedef vector<double> Vec;
typedef vector<int> vec;
typedef vector<Vec> MAT;
typedef vector<vec> mat;
lli MOD=1000000007;
//Ax=bをとくAは正方行列
//rankA<=min(m,n)ならば配列0のvecが帰る
Vec gauss_jordan(const MAT& A,const Vec&b){
    int n  = A.size();
      MAT B (n,Vec(n+1));
        rep(i,n)rep(j,n)B[i][j]=A[i][j];
          rep(i,n)B[i][n]=b[i];

            rep(i,n){
                  int pivot = i;
                      for(int j= i;j<n;j++){
                              if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;
                                  }

                          swap(B[i],B[pivot]);
                              if(abs(B[i][i])<eps)return Vec();
                                  //B_i_i成分が0であるつまり階数が
                                  for(int j =i +1 ;j<=n;j++)B[i][j]/=B[i][i];
                                      rep(j,n){
                                              if(i!=j)
                                                        for(int k = i+1;k<=n;k++){
                                                                    B[j][k] -=B[j][i]*B[i][k];
                                                                            }
                                                  }
                                        }
              Vec x(n);
                for(int i =0;i<n;i++){
                      x[i]= B[i][n];
                        }
                  return x;


}
double det(const MAT& A){
    int n = A.size();
      MAT B (n,Vec(n));
        rep(i,n)rep(j,n)B[i][j]=A[i][j];
          double ans = 1;
            rep(i,n){
                  int pivot = i;
                      for(int j=i;j<n;j++){
                              if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;
                                  }
                          if(i!=pivot)ans *= -1;
                              swap(B[i],B[pivot]);
                                  if(abs(B[i][i])<eps)
                                          return 0;
                                      ans *= B[i][i];
                                          for(int j =i +1 ;j<n;j++)B[i][j]/=B[i][i];
                                              rep(j,n){
                                                      if(i!=j)
                                                                for(int k = i+1;k<n;k++){
                                                                            B[j][k] -=B[j][i]*B[i][k];
                                                                                    }
                                                          }
                                                }
              return ans;

}
int  rank(const MAT& A){
    int n = A.size();
      MAT B (n,Vec(n));
        rep(i,n)rep(j,n)B[i][j]=A[i][j];

          rep(i,n){
                int pivot = i;
                    for(int j=i;j<n;j++){
                            if(abs(B[j][i])>abs(B[pivot][i]))pivot = j;
                                }
                        swap(B[i],B[pivot]);
                            if(abs(B[i][i])<eps)return i;
                                for(int j =i +1 ;j<n;j++)B[i][j]/=B[i][i];
                                    rep(j,n){
                                            if(i!=j)
                                                      for(int k = i+1;k<n;k++){
                                                                  B[j][k] -=B[j][i]*B[i][k];
                                                                          }
                                                }
                                      }
            return n;
}
void euler(lli m){
    vector<int> p;
    vector<int> l;
      lli M = m;
      int a=0,b=0;
        for(int i = 2;i<=m;i++){
              if(m%i==0){
                      p.push_back(i);
                      a++;
                      if(m/i%i==0)b++;
                            while(m%i==0){
                              m/=i;
                            }
                                }
                  if(M<i*i&&p.size()==0){
                          p.push_back(M);
                          a++;
                                break;
                                    }

                    }
          lli ans = M;
          //rep(i,p.size())cout<<p[i]<<endl;
          if(a%2==0&&b%2==1)cout<<"Alice";
          else if(a%2==1&&b%2==0)cout << "Alice";
          else cout << "Bob";
          cout << endl;
          return;
}
lli powm(lli a,lli p,lli mod){
    lli ans =1;
      while(p>0){
            if(p&1)ans=(ans*a) % mod;
                a=(a*a)%mod;
                    p >>=1;
                      }
        return ans%mod;
}
lli inv(lli a){
    return  powm(a,MOD-2,MOD);
}
lli gcd(lli A,lli B){
    if(A%B==0)return B;
      else return gcd(B,A%B);
}
mat mul_mat_mod(mat A,mat B,lli m){
    int n = A.size();
      mat C (n,vec(n));
        rep(i,n)rep(j,n)rep(k,n){
              C[i][j]+=A[i][k]*B[k][j] %m;
                  C[i][j]%=m;
                    }
          return C;
}
mat pow_mat(mat A,lli p,lli mod){
    int n= A.size();
      mat B = mat(n,vec(n));
        while(p>0){
              if(p&1){
                      B=mul_mat_mod(A,B,mod);
                          }
                  A = mul_mat_mod(A,A,mod);
                      p>>=1;
                        }
          return B;
}
lli comb(lli a,lli b ){
    lli ans =1;
      rep(i,b){
            ans = ans %MOD* (a-i)%MOD*inv(b-i)%MOD;
              }
        return ans ;
}
int main(){
  lli N;
  cin >> N;
  euler(N);
}

0