1139D - Steps to One - CodeForces Solution


dp math number theory probabilities *2300

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;

#define int long long int
const int max_n =1e5, mod = 1e9 + 7;

int pw(int a, int b) {
    if (b == 0)
        return 1;
    int k = pw(a, b / 2);
    if (b % 2 == 0)
        return ((k * k) % mod);
    return k * k % mod * a % mod;
}

int dp[max_n + 10], m, ans = 1;

int32_t main() {
    cin >> m;
    for (int i = 2; i <= m; i++){
        int p = (m / i) * pw(m, mod - 2) % mod;
        dp[i] = p * pw((1 - p + mod) % mod, mod - 2) % mod;
    }

    for (int i = m; i >= 2; i--)
        for (int j = 2 * i; j <= m; j += i)
            dp[i] = ((dp[i] - dp[j]) % mod + mod) % mod;
        
    for (int i = 2; i <= m; i++) 
        ans = (ans + dp[i]) % mod;
    
    cout << ans;
}


Comments

Submit
0 Comments
More Questions

1641A - Great Sequence
1537A - Arithmetic Array
1370A - Maximum GCD
149A - Business trip
34A - Reconnaissance 2
59A - Word
462B - Appleman and Card Game
1560C - Infinity Table
1605C - Dominant Character
1399A - Remove Smallest
208A - Dubstep
1581A - CQXYM Count Permutations
337A - Puzzles
495A - Digital Counter
796A - Buying A House
67A - Partial Teacher
116A - Tram
1472B - Fair Division
1281C - Cut and Paste
141A - Amusing Joke
112A - Petya and Strings
677A - Vanya and Fence
1621A - Stable Arrangement of Rooks
472A - Design Tutorial Learn from Math
1368A - C+=
450A - Jzzhu and Children
546A - Soldier and Bananas
32B - Borze
1651B - Prove Him Wrong
381A - Sereja and Dima