zoukankan      html  css  js  c++  java
  • n的除法结果和

    给定一个正整数n,求(sum_{i=1}^{n}{left[ frac{n}{i} ight]}),式子中[x]为下取整。答案可能会很大,输出答案对998244353取模后的值。
    链接:https://ac.nowcoder.com/acm/contest/6221/B
    来源:牛客网

    这个题直接暴力是做不来的。

    我们先举一个例子:10,它的所有结果是10 5 3 2 2 1 1 1 1 1。

    我们能够看到有相当一部分的数是重复的,那这样的话我们能不能通过找到每一段数并且直接用求和公式来解决这个问题呢?

    我们从最左端的数开始(设 l = 1,l代表左端点, r代表右端点)(因为n / 1 == n,故最左端的数一定是n),每次计算出 n / l 的值,这个值是当前位置的结果值,然后再用n除以这个数,r = n / (n / l)就能获得右端点的位置,然后直接计算整段值,再将l置为 r + 1 即下一段的左端点。

    class Solution {
    public:
        /**
         *
         * @param n long长整型
         * @return int整型
         */
        int work(long long n) {
            const int p = 998244353;
            typedef long long ll;
            ll res = 0;
            for(ll l = 1, r;l <= n; l = ++r){
                r = n / (n / l);
                res += (n / l) % p * (r - l + 1) % p;
            }
            return res % p;
        }
    
  • 相关阅读:
    day15 web框架和Django基础
    activiti5.22 获得mybatis sessionFactory
    activiti 视图
    activiti 任意退
    spring cloud &&spring boot
    JPA 一对多关联
    webstorm 快捷键
    web storm 破解
    Excel通用导出
    activiti 小计
  • 原文地址:https://www.cnblogs.com/waitti/p/13337907.html
Copyright © 2011-2022 走看看