#include #include using namespace std; using namespace atcoder; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define all(x) (x).begin(),(x).end() const long long MOD = 1000000007; const long long INF = 9*1e18; using ll = long long; using mint = modint1000000007; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b primelist; bool Prime(ll num) { if (num < 2) return false; else if (num == 2) return true; else if (num % 2 == 0) return false; double sqrtNum = sqrt(num); for (ll i = 3; i <= sqrtNum; i += 2) { if (num % i == 0) { return false; } } return true; } void primeinput(){ for(ll i = 2;i<200200;i++){ if(Prime(i)){ primelist.push_back(i); } } } vector bunkai(ll N){ vector res; rep(i,primelist.size()){ while(N%primelist[i] == 0){ res.push_back(primelist[i]); N/=primelist[i]; } } if(N!=1){ res.push_back(N); } return res; } long long pow(long long x, long long n, long long MM) { long long ret = 1; while (n > 0) { if (n & 1) ret = ret * x % MM; // n の最下位bitが 1 ならば x^(2^i) をかける x = x * x % MM; n >>= 1; // n を1bit 左にずらす } return ret; } mint comb(ll N,ll K){ mint t = 1; for(int i = 0;i>N>>K; if(N == 1){ cout << 1 << endl; return 0; } primeinput(); COMinit(); vector S = bunkai(N); sort(all(S)); vector num; ll temp = 1; for(int i = 1;i