(整数分块变形)牛客编程巅峰赛S2第1场 - 钻石&王者 C-牛牛算题

时间:2020-11-21
本文章向大家介绍(整数分块变形)牛客编程巅峰赛S2第1场 - 钻石&王者 C-牛牛算题,主要包括(整数分块变形)牛客编程巅峰赛S2第1场 - 钻石&王者 C-牛牛算题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目链接:https://ac.nowcoder.com/acm/contest/9005/C

整数分块

枚举p(也就是每一个分块的七点,l),num/(num/l)(也就是每一个分块里面的终点,r)

比如num=20的时候

1*20+0
2*10+0
3*6+2
4*5+0
5*4+0
6*3+2
7*2+6            //r=7
8*2+4            //
9*2+2            //
10*2+0           //r=20/(20/7) = 10

11*1+9 //l=11 12*1+8 ... 18*1+2 19*1+2 20*1+0 //r = 20/(20/11) = 20

 

 

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回1-n的所有k*m的和
     * @param num long长整型 正整数 n
     * @return long长整型
     */
    long long cowModCount(long long num) {
        // write code here
        long long ans = 0, mod = 1e9+7;
        for(long long l = 1, r;l <= num;l=r+1)
        {
            r = num/(num/l);
            ans = (ans + (r-l+1)*(num/l)*num%mod - (r-l+1)*(l+r)/2*(num/l)%mod*(num/l)%mod+mod)%mod;
        }
        return ans;
    }
};