Submission #24159


Source Code Expand

// compile with "g++ XXX.cc -mno-cygwin -O2" in Cygwin

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<numeric>
#include<functional>
#include<complex>
#include<bitset>
#include<cassert>

using namespace std;
#define BET(a,b,c) ((a)<=(b)&&(b)<(c))
#define FOR(i,n) for(int i=0,i##_end=(int(n));i<i##_end;i++)
#define FOR3(i,a,b) for(int i=a,i##_end=b;i<i##_end;i++)
#define FOR_EACH(it,v) for(__typeof(v.begin()) it=v.begin(),it_end=v.end() ; it != it_end ; it++)
#define SZ(x) (int)(x.size())
#define ALL(x) (x).begin(),(x).end()
#define MP make_pair
#define CLS(x,val) memset((x) , val , sizeof(x)) 
typedef long long ll_t;
typedef long double ld_t;
typedef vector<int> VI; 
typedef vector<VI> VVI;
typedef complex<int> xy_t;

template<typename T> void debug(T v , string delimiter = "\n")
{ for(__typeof(v.begin()) it=v.begin(),it_end=v.end() ; it != it_end ; it++) cout << *it << delimiter; cout << flush ;}

int dx[]  = {0,1,0,-1};
int dy[]  = {1,0,-1,0};
string ds = "SENW";

const double PI = 4.0*atan(1.0);

ll_t exgcd(ll_t a, ll_t b, ll_t &x, ll_t &y)
{
  if(b == 0) {
    x = 1; y = 0;
    return a;
  } else {
    ll_t d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
  }
}

// 逆元
ll_t inv(ll_t a, ll_t mod) {
  ll_t x, y;
  if (exgcd(a, mod, x, y) == 1){
    return (x + mod) % mod;
  }
  else {
    return -1;
  }
}

ll_t fact[200000];
int mod = 1000000007;

ll_t choose_mod(int s , int t) // O(1) , mod is prime
{
  if(s<0 || t<0) return 0 ;
  if(s < t) return 0 ;
  return fact[s]*inv(fact[t],mod)%mod*inv(fact[s-t],mod)%mod;
}

vector<int> element(int n)
{
  VI p ;
  for(int x=2;x*x<=n;x++){
    int cnt = 0;
    while(n % x == 0){
      cnt++;
      n /= x;
    }
    if(cnt) p.push_back(cnt);
  }
  if(n>1) p.push_back(1);
  return p;
}

int main() {
  fact[0]=1;
  FOR(i,200000) if(i) fact[i] = fact[i-1] * i % mod;

  ll_t N,M;
  cin>>N>>M;
  if(N < 0) N = -N;
  
  vector<int> e = element(N);
  ll_t base = 1;
  if(SZ(e) && M > 1){
    FOR(i,SZ(e)){
      int all = e[i] + M - 1;
      //cout<<all<<" "<<e[i]<<" "<< choose_mod(all , e[i])<<endl;
      base *= choose_mod(all , e[i]) * choose_mod(all - e[i] , M - 1) ;
      base %= mod;
    }
  }
  //cout<<base<<endl;
  ll_t p = 0;
  for(int i = 0 ; i <= M ; i += 2){
    p = (p + choose_mod(M , i)) % mod;
    //cout<<i<<" "<<choose_mod(M , i) <<endl;
  }
  base = base * p % mod;
  cout<<base<<endl;

  return 0 ;
}

Submission Info

Submission Time
Task D - 表現の自由 ( Freedom of expression )
User EmK
Language C++ (G++ 4.6.4)
Score 100
Code Size 2691 Byte
Status AC
Exec Time 81 ms
Memory 2324 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 40
Set Name Test Cases
All 00_max.txt, 00_max2.txt, 00_max3.txt, 00_min.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 01_rnd_21.txt, 01_rnd_22.txt, 01_rnd_23.txt, 01_rnd_24.txt, 01_rnd_25.txt, 01_rnd_26.txt, 01_rnd_27.txt, 01_rnd_28.txt, 01_rnd_29.txt, 04_primes_01.txt, 04_primes_02.txt
Case Name Status Exec Time Memory
00_max.txt AC 81 ms 2308 KB
00_max2.txt AC 81 ms 2296 KB
00_max3.txt AC 81 ms 2304 KB
00_min.txt AC 27 ms 2288 KB
00_sample_01.txt AC 28 ms 2304 KB
00_sample_02.txt AC 29 ms 2296 KB
00_sample_03.txt AC 28 ms 2300 KB
00_sample_04.txt AC 29 ms 2292 KB
01_rnd_00.txt AC 48 ms 2300 KB
01_rnd_01.txt AC 35 ms 2320 KB
01_rnd_02.txt AC 28 ms 2324 KB
01_rnd_03.txt AC 48 ms 2296 KB
01_rnd_04.txt AC 44 ms 2292 KB
01_rnd_05.txt AC 51 ms 2316 KB
01_rnd_06.txt AC 37 ms 2300 KB
01_rnd_07.txt AC 37 ms 2296 KB
01_rnd_08.txt AC 78 ms 2300 KB
01_rnd_09.txt AC 56 ms 2296 KB
01_rnd_10.txt AC 59 ms 2292 KB
01_rnd_11.txt AC 64 ms 2296 KB
01_rnd_12.txt AC 76 ms 2292 KB
01_rnd_13.txt AC 52 ms 2304 KB
01_rnd_14.txt AC 57 ms 2300 KB
01_rnd_15.txt AC 39 ms 2324 KB
01_rnd_16.txt AC 65 ms 2292 KB
01_rnd_17.txt AC 81 ms 2296 KB
01_rnd_18.txt AC 67 ms 2300 KB
01_rnd_19.txt AC 35 ms 2304 KB
01_rnd_20.txt AC 54 ms 2272 KB
01_rnd_21.txt AC 54 ms 2304 KB
01_rnd_22.txt AC 40 ms 2304 KB
01_rnd_23.txt AC 61 ms 2296 KB
01_rnd_24.txt AC 69 ms 2304 KB
01_rnd_25.txt AC 75 ms 2304 KB
01_rnd_26.txt AC 59 ms 2308 KB
01_rnd_27.txt AC 48 ms 2288 KB
01_rnd_28.txt AC 52 ms 2296 KB
01_rnd_29.txt AC 76 ms 2300 KB
04_primes_01.txt AC 81 ms 2272 KB
04_primes_02.txt AC 81 ms 2300 KB