zoukankan      html  css  js  c++  java
  • Codeforces 622F The Sum of the k-th Powers(数论)

    题目链接 The Sum of the k-th Powers

    其实我也不懂为什么这么做的……看了无数题解觉得好厉害哇……

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define rep(i, a, b)    for (int i(a); i <= (b); ++i)
     6 #define dec(i, a, b)    for (int i(a); i >= (b); --i)
     7 
     8 const int mod = 1000000007;
     9 const int N   = 1000010;
    10 
    11 int v[N], p[N], f[N], r[N], b[N], c[N], d[N];
    12 int n, m, ret, tmp, tot;
    13 
    14 inline int Pow(int a, int b){
    15     int t = 1;
    16     for (; b; b >>= 1, a = 1LL * a * a % mod)
    17         if (b & 1) t = 1LL * t * a % mod;
    18     return t;
    19 }
    20 
    21 int main(){
    22 
    23     scanf("%d%d", &n, &m); ++m;
    24 
    25     f[1] = 1; 
    26     rep(i, 2, m){
    27         if (!v[i]){
    28             f[i] = Pow(i, m - 1);
    29             p[++tot] = i;
    30         }
    31 
    32         rep(j, 1, tot){
    33             if (i * p[j] > m) break;
    34             v[i * p[j]] = 1;
    35             f[i * p[j]] = 1LL * f[i] * f[p[j]] % mod;
    36             if (i % p[j] == 0) break;
    37         }
    38     }
    39 
    40     rep(i, 2, m) (f[i] += f[i - 1]) %= mod;
    41 
    42     if ((n %= mod) <= m) return 0 * printf("%d
    ", f[n]);
    43 
    44     r[0] = r[1] = 1;
    45     rep(i, 2, m) r[i] = 1LL * (mod - r[mod % i]) * (mod / i) % mod;
    46     rep(i, 2, m) r[i] = 1LL * r[i - 1] * r[i] % mod;
    47     rep(i, 1, m + 1) b[i] = (n - i + 1 + mod) % mod;
    48     
    49     c[0] = d[m + 2] = 1;
    50     rep(i, 1, m + 1) c[i] = 1LL * c[i - 1] * b[i] % mod;
    51     dec(i, m + 1, 1) d[i] = 1LL * d[i + 1] * b[i] % mod;
    52 
    53     rep(i, 0, m){
    54         tmp = 1LL * f[i] * r[m - i] % mod * r[i] % mod * c[i] % mod * d[i + 2] % mod;
    55         if ((m - i) & 1) (ret += mod - tmp) %= mod;
    56         else (ret += tmp) %= mod;
    57     }
    58 
    59     return 0 * printf("%d
    ", ret);
    60 }
  • 相关阅读:
    用call/apply实现bind
    FED1 修改 this 指向(中等)
    46. 全排列(中等)
    JavaScript 用七种方式教你判断一个变量是否为数组类型(转)
    179. 最大数(中等)
    125. 验证回文串(简单)
    执行git pull命令时出错
    前端修改滚动条样式
    js实现每日定时任务
    Vue实现验证码控件
  • 原文地址:https://www.cnblogs.com/cxhscst2/p/6798469.html
Copyright © 2011-2022 走看看