Submission #11938251


Source Code Expand

#include <bits/stdc++.h>
#define INF 1e9
using namespace std;

#define REPR(i,n) for(int i=(n); i >= 0; --i)
#define FOR(i, m, n) for(int i = (m); i < (n); ++i)
#define REP(i, n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define ALL(a)  (a).begin(),(a).end()
#define endl "\n"

template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
int gcd(int a,int b){return b?gcd(b,a%b):a;}
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}


template< int mod >
struct ModInt {
    int x;

    ModInt() : x(0) {}

    ModInt(int64_t y) : x(y >= 0 ? y % mod : (mod - (-y) % mod) % mod) {}

    ModInt &operator+=(const ModInt &p) {
        if((x += p.x) >= mod) x -= mod;
        return *this;
    }

    ModInt &operator-=(const ModInt &p) {
        if((x += mod - p.x) >= mod) x -= mod;
        return *this;
    }

    ModInt &operator*=(const ModInt &p) {
        x = (int) (1LL * x * p.x % mod);
        return *this;
    }

    ModInt &operator/=(const ModInt &p) {
        *this *= p.inverse();
        return *this;
    }

    ModInt operator-() const { return ModInt(-x); }

    ModInt operator+(const ModInt &p) const { return ModInt(*this) += p; }

    ModInt operator-(const ModInt &p) const { return ModInt(*this) -= p; }

    ModInt operator*(const ModInt &p) const { return ModInt(*this) *= p; }

    ModInt operator/(const ModInt &p) const { return ModInt(*this) /= p; }

    bool operator==(const ModInt &p) const { return x == p.x; }

    bool operator!=(const ModInt &p) const { return x != p.x; }

    ModInt inverse() const {
        int a = x, b = mod, u = 1, v = 0, t;
        while(b > 0) {
            t = a / b;
            swap(a -= t * b, b);
            swap(u -= t * v, v);
        }
        return ModInt(u);
    }

    ModInt pow(int64_t n) const {
        ModInt ret(1), mul(x);
        while(n > 0) {
            if(n & 1) ret *= mul;
            mul *= mul;
            n >>= 1;
        }
        return ret;
    }

    friend ostream &operator<<(ostream &os, const ModInt &p) {
        return os << p.x;
    }

    friend istream &operator>>(istream &is, ModInt &a) {
        int64_t t;
        is >> t;
        a = ModInt< mod >(t);
        return (is);
    }

    static int get_mod() { return mod; }
};
using modint = ModInt< int(1e9)+7 >;

// powのll番
modint pow(modint a,modint b) {
    modint k = 1;
    REP(_,b.x) k*=a;
    return k;
}

void solve() {
    int N,K;
    cin >>N >> K;

    modint  ans;
    vector<modint > v(K+1,0);
    REPR(i,K) {
        if (i == 0) break;
        modint  d (K/i);
        v[i] =  d.pow(N);
        auto ni = i * 2;
        while ( ni <= K) {
            v[i] -= v[ni];
            ni += i;
        }
        modint m;
        m =   v[i] * i;
        ans += m;
    }

    cout << ans << endl;

}

int main() {
    solve();
    return 0;
}

Submission Info

Submission Time
Task E - Sum of gcd of Tuples (Hard)
User reud
Language C++ (GCC 9.2.1)
Score 500
Code Size 3084 Byte
Status AC
Exec Time 16 ms
Memory 3788 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 24
Set Name Test Cases
Sample sample_01, sample_02, sample_03
All hand_01, hand_02, hand_03, hand_04, hand_05, hand_06, random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09, random_10, random_11, random_12, random_13, random_14, random_15, sample_01, sample_02, sample_03
Case Name Status Exec Time Memory
hand_01 AC 6 ms 3556 KiB
hand_02 AC 7 ms 3524 KiB
hand_03 AC 2 ms 3408 KiB
hand_04 AC 2 ms 3480 KiB
hand_05 AC 2 ms 3408 KiB
hand_06 AC 14 ms 3700 KiB
random_01 AC 11 ms 3416 KiB
random_02 AC 7 ms 3788 KiB
random_03 AC 8 ms 3408 KiB
random_04 AC 8 ms 3592 KiB
random_05 AC 9 ms 3476 KiB
random_06 AC 2 ms 3412 KiB
random_07 AC 3 ms 3612 KiB
random_08 AC 2 ms 3596 KiB
random_09 AC 4 ms 3472 KiB
random_10 AC 1 ms 3628 KiB
random_11 AC 11 ms 3476 KiB
random_12 AC 10 ms 3408 KiB
random_13 AC 11 ms 3472 KiB
random_14 AC 12 ms 3408 KiB
random_15 AC 11 ms 3648 KiB
sample_01 AC 2 ms 3480 KiB
sample_02 AC 2 ms 3632 KiB
sample_03 AC 16 ms 3784 KiB