Submission #20113

#TimeUsernameProblemLanguageResultExecution timeMemory
20113gs14004팔찌 (kriii4_V)C++14
100 / 100
567 ms25160 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> #include <stack> #include <queue> #include <map> #include <set> #include <algorithm> #include <string> #include <functional> #include <vector> #include <numeric> #include <deque> #include <utility> #include <bitset> #include <iostream> using namespace std; typedef long long lint; typedef long double llf; typedef pair<int, int> pi; const int mod = 1e9 + 7; lint ipow(lint x, lint p){ lint ret = 1, piv = x % mod; while(p){ if(p&1) ret *= piv; piv *= piv; ret %= mod; piv %= mod; p >>= 1; } return ret; } int low[1000005], phi[1000005]; lint kpow[1000005], inv[1000005]; int n, k; int main(){ cin >> n >> k; phi[1] = 1; for(int i=2; i<=n; i++){ for(int j=i; j<=n; j+=i){ if(!low[j]) low[j] = i; } phi[i] = i; for(int j=i; j!=1; ){ int p = low[j]; while(j % p == 0){ j /= p; } phi[i] = (1ll * phi[i] * (p-1)) / p; } } kpow[0] = 1; for(int i=1; i<=n; i++){ kpow[i] = kpow[i-1] * k % mod; inv[i] = ipow(i, mod-2); } lint ret = 2; for(int i=1; i<=n; i++){ for(int j=i; j<=n; j+=i){ lint tmp = kpow[i] * phi[j/i] % mod; tmp *= inv[j]; tmp %= mod; ret += tmp; } } for(int i=1; i<=n; i++){ if(i%2 == 0) ret += (1ll * (k+1) * kpow[i/2] % mod) * ((mod + 1) / 2) % mod; else ret += kpow[i/2+1]; ret %= mod; } ret *= (mod + 1) / 2; ret %= mod; cout << ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...