Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define nl "\n"
- void files(){
- ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #endif
- }
- const int mod = 1000000009;
- vector<int> primes;
- void sieve(ll n){
- vector<bool> is_prime(n + 1, true);
- is_prime[0] = is_prime[1] = false;
- for (int i = 2; i <= n; i++){
- if (is_prime[i]){
- primes.push_back(i);
- for (int j = i * i; j <= n; j += i) is_prime[j] = false;
- }
- }
- }
- void solve(){
- ll n,k; cin>>n>>k;
- sieve(n);
- ll ans = 1;
- for (auto& p : primes){
- vector<int> cnt(n + 1, 0);
- for (int i = 1; i <= n; i++){
- int num = i;
- while (num % p == 0){
- cnt[i]++;
- num /= p;
- }
- }
- vector<vector<ll>> dp(n+1, vector<ll>(k+1, 0));
- for (int i = 0; i <= n; i++) dp[i][0] = cnt[i];
- for (int j = 1; j <= k; j++){
- dp[0][j] = 0;
- for (int i = 1; i <= n; i++){
- dp[i][j] = dp[i][j - 1]+dp[i - 1][j];
- dp[i][j] %= mod;
- }
- }
- ans = (ans * (dp[n][k] + 1)) % mod;
- }
- cout<<ans<<nl;
- }
- int main(){
- files();
- int t = 1;
- //cin>>t;
- while(t--) solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement