F. Sum of Numerators

Who is The 19th ZUCCPC Champion

https://ac.nowcoder.com/acm/contest/31533/A

题目链接


题意

给定 N,KN, K,求解将序列 {i2K}\{\dfrac{i}{2^K}\} 中元素全部约分后的分子和,其中 ii 遍历 1N1 \sim N

制约

N[1,109],K[0,109]N \in [1, 10^9], K \in [0, 10 ^ 9]


解答

首先注意到 gcd(2K,odd)=1\gcd(2^K, \mathrm{odd}) = 1,于是我们先将所有奇数和算入答案,我们知道:

i=1N[i%2=1]×i=N22\sum_{i = 1}^N[i \% 2 = 1] \times i = \bigg\lceil\dfrac{N}{2}\bigg\rceil ^2

1+3+5+7++Nx  =x2\underbrace{1 + 3 + 5 + 7 + \cdots + N}_{x\;项} = x^2

接下来考虑偶数与 2K2 ^ K 约分的过程,对于每一个偶数,都可写作

X=x2t,  where  gcd(2,x)=1X = x2 ^ t,\;\mathtt{where}\;\gcd(2, x) = 1

于是 2K2 ^ K 将会约分所有 tKt \le K 的部分,使得其变为一段奇数和,使用上述算式求解即可。

最后再加上没有被约分的偶数和即可,即

i=1N[i%2=0]×i=N2×(N2+1)\displaystyle\sum_{i = 1}^N[i \% 2 = 0] \times i = \bigg\lfloor\dfrac{N}{2}\bigg\rfloor \times \bigg(\bigg\lfloor\dfrac{N}{2}\bigg\rfloor + 1\bigg)

2+4+6+8++Nx  =2×(1+2+3+4++N2)\underbrace{2 + 4 + 6 + 8 + \cdots + N}_{x\;项} = 2 \times (1 + 2 + 3 + 4 + \cdots + \dfrac{N}{2})

参考代码

using i64 = long long;

void solve() {
    int n, k;
    std::cin >> n >> k;
 
    i64 ans = 0;
    for (k += 1; k -- && n; n -= (n + 1) / 2) {
        ans += 1LL * ((n + 1) / 2) * ((n + 1) / 2);
        (!k) && (ans += 1LL * (n / 2) * (n / 2 + 1));
    }
     
    std::cout << ans << '\n';
}
全部评论

相关推荐

12-05 15:39
门头沟学院 Java
Java说的道理:牛客都是没经历社会毒打的学生,来这问没参考性
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务