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';
}
全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务