Submission #3462268
Source Code Expand
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define file(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
#define go(x, i) for(register int i = head[x]; i; i = nxt[i])
#define For(i, a, b) for(register int i = (a), i##_end_ = (b); i <= i##_end_; ++ i)
#define FOR(i, a, b) for(register int i = (a), i##_end_ = (b); i >= i##_end_; -- i)
#define debug(x) cout << #x << " = " << x << endl
#define mem(a, b) memset(a, b, sizeof(a))
#define cpy(a, b) memcpy(a, b, sizeof(a))
#define inf (0x3f3f3f3f)
#define INF (1e18)
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define y1 orzorz
typedef unsigned long long ull;
typedef unsigned int uint;
typedef long long ll;
typedef std::pair<ll, int> PLI;
typedef std::pair<int, int> PII;
typedef long double ldb;
typedef double db;
namespace IO {
#define getc() ((S_ == T_) && (T_ = (S_ = Ch_) + fread(Ch_, 1, Buffsize, stdin), S_ == T_) ? 0 : *S_ ++)
#define putc(x) *nowps ++ = (x)
const uint Buffsize = 1 << 15, Output = 1 << 23;
static char Ch_[Buffsize], *S_ = Ch_, *T_ = Ch_;
static char Out[Output], *nowps = Out;
inline void flush() {fwrite(Out, 1, nowps - Out, stdout); nowps = Out;}
template<class T>inline bool chkmax(T &_, T __) {return _ < __ ? _ = __, 1 : 0;}
template<class T>inline bool chkmin(T &_, T __) {return _ > __ ? _ = __, 1 : 0;}
template<class T>inline void read(T &_) {
_ = 0; static char __; T ___ = 1;
for(__ = getc(); !isdigit(__); __ = getc()) if(__ == '-') ___ = -1;
for(; isdigit(__); __ = getc()) _ = (_ << 3) + (_ << 1) + (__ ^ 48);
_ *= ___;
}
template<class T>inline void write(T _, char __ = '\n') {
if(!_) putc('0');
if(_ < 0) putc('-'), _ = -_;
static uint sta[111], tp;
for(tp = 0; _; _ /= 10) sta[++ tp] = _ % 10;
for(; tp; putc(sta[tp --] ^ 48)); putc(__);
}
inline void procStatus() {
std::ifstream t("/proc/self/status");
std::cerr << std::string(std::istreambuf_iterator<char>(t), std::istreambuf_iterator<char>());
}
}
using namespace std;
using namespace IO;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
map<int, int> num;
int fac[N], inv[N];
int notp[N], prime[N], cnt;
int qpow(int a, int x) {
int ret = 1;
while(x) {
if(x & 1) ret = (ll)ret * a % mod;
x >>= 1, a = (ll)a * a % mod;
}
return ret;
}
int C(int n, int m) {
return n < m ? 0 : 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
}
void Get_Prime(int n) {
notp[0] = notp[1] = 1;
For(i, 2, n) {
if(!notp[i]) prime[++ cnt] = i;
For(j, 1, cnt) {
if(prime[j] * i > n) break;
notp[prime[j] * i] = 1;
if(!(i % prime[j])) break;
}
}
}
int main() {
#ifdef ylsakioi
file("AT187");
#endif
Get_Prime(sqrt(1e9));
fac[0] = 1;
For(i, 1, N - 1) fac[i] = 1ll * fac[i - 1] * i % mod;
inv[N - 1] = qpow(fac[N - 1], mod - 2);
FOR(i, N - 1, 1) inv[i - 1] = 1ll * inv[i] * i % mod;
int n, m, flag = 0, ans = 1;
read(n), read(m), n = abs(n);
For(j, 1, cnt) if(!(n % prime[j])) {
int now = 0;
while(!(n % prime[j])) n /= prime[j], ++ now;
num[prime[j]] = now;
}
if(n ^ 1) num[n] = 1;
for(auto v : num) ans = 1ll * ans * C(v.y + m - 1, m - 1) % mod;
write(1ll * ans * qpow(2, m - 1) % mod);
return flush(), 0;
}
Submission Info
Judge Result
Set Name |
All |
Score / Max Score |
100 / 100 |
Status |
|
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 |
13 ms |
12544 KB |
00_max2.txt |
AC |
13 ms |
12544 KB |
00_max3.txt |
AC |
13 ms |
12544 KB |
00_min.txt |
AC |
13 ms |
12544 KB |
00_sample_01.txt |
AC |
14 ms |
12544 KB |
00_sample_02.txt |
AC |
13 ms |
12544 KB |
00_sample_03.txt |
AC |
13 ms |
12544 KB |
00_sample_04.txt |
AC |
13 ms |
12544 KB |
01_rnd_00.txt |
AC |
13 ms |
12544 KB |
01_rnd_01.txt |
AC |
13 ms |
12544 KB |
01_rnd_02.txt |
AC |
14 ms |
12544 KB |
01_rnd_03.txt |
AC |
13 ms |
12544 KB |
01_rnd_04.txt |
AC |
13 ms |
12544 KB |
01_rnd_05.txt |
AC |
13 ms |
12544 KB |
01_rnd_06.txt |
AC |
13 ms |
12544 KB |
01_rnd_07.txt |
AC |
13 ms |
12544 KB |
01_rnd_08.txt |
AC |
13 ms |
12544 KB |
01_rnd_09.txt |
AC |
14 ms |
12544 KB |
01_rnd_10.txt |
AC |
14 ms |
12544 KB |
01_rnd_11.txt |
AC |
13 ms |
12544 KB |
01_rnd_12.txt |
AC |
13 ms |
12544 KB |
01_rnd_13.txt |
AC |
13 ms |
12544 KB |
01_rnd_14.txt |
AC |
13 ms |
12544 KB |
01_rnd_15.txt |
AC |
13 ms |
12544 KB |
01_rnd_16.txt |
AC |
13 ms |
12544 KB |
01_rnd_17.txt |
AC |
13 ms |
12544 KB |
01_rnd_18.txt |
AC |
14 ms |
12544 KB |
01_rnd_19.txt |
AC |
13 ms |
12544 KB |
01_rnd_20.txt |
AC |
13 ms |
12544 KB |
01_rnd_21.txt |
AC |
13 ms |
12544 KB |
01_rnd_22.txt |
AC |
13 ms |
12544 KB |
01_rnd_23.txt |
AC |
13 ms |
12544 KB |
01_rnd_24.txt |
AC |
13 ms |
12544 KB |
01_rnd_25.txt |
AC |
13 ms |
12544 KB |
01_rnd_26.txt |
AC |
13 ms |
12544 KB |
01_rnd_27.txt |
AC |
14 ms |
12544 KB |
01_rnd_28.txt |
AC |
13 ms |
12544 KB |
01_rnd_29.txt |
AC |
13 ms |
12544 KB |
04_primes_01.txt |
AC |
13 ms |
12544 KB |
04_primes_02.txt |
AC |
13 ms |
12544 KB |