CodeForces 616E(数学规律)
来源:互联网 发布:python 乘方 编辑:程序博客网 时间:2024/06/05 02:50
题意:
输入n, m(1 ≤ n, m ≤ 10^13),求 n%1 + n%2 + ... + n%m的值.
思路:
n%i = n - n/i(整除)*i;
所以 ∑(i=1, m) n%i 可以转化为 m*n - ∑(i=1, m) n/i*i;
易知:给定一个i,被n整除得c = n/i,另r = n/c,很容易可以得到n整除i到r范围内的所有数的值都是相同的,所以我们另i为下界,r为上界。那么我们求 ∑(i=1, m) n/i*i的时候就可以将它们分成若干组进行求和,另(n/i)相同的连续一段为一组。所以就可以利用等差数列求和公式对i到r范围内进行求和然后再乘上(n/i)就得到了这一段的ans,同理,其他段也是如此。
#include <algorithm>#include <iostream>#define LL long longusing namespace std;const LL mod = 1e9+7;LL n, m, ans, up, sum, r;int main(){cin >> n >> m;ans = (n%mod)*(m%mod)%mod;up = min(n, m);//当n>m时, 只能求m个模; n<m时, 只能求n个模 sum = 0;for(LL i = 1; i <= up; ++i){r = min(n/(n/i), up);//如果上界超过up, 缩至up LL a = i+r;//准备求和公式 LL b = r-i+1;if(a&1) b /= 2;else a /= 2;sum = (sum + ((a%mod)*(b%mod)%mod)*(n/i)%mod)%mod;//获得此段的ans i = r;}cout << (ans-sum+mod)%mod << endl;//防止mod之后相减变负数 return 0;}
阅读全文
1 0
- CodeForces 616E(数学规律)
- CodeForces - 630E A rectangle (数学规律)
- CodeForces 166E--规律
- codeforces 730E (数学)
- codeforces 733E (数学)
- codeforces 676E 数学多项式
- Codeforces 615E Hexagons 【找规律】
- Codeforces--630E--A rectangle(规律)
- CodeForces-630 E. A rectangle【规律】
- [Codeforces 615E] Hexagons (找规律)
- Codeforces 616E Sum of Remainders 【数学分块】
- CodeForces - 630D Hexagons! (数学规律)
- 【数学相关、规律】Codeforces 696B Puzzles
- Codeforces 493E Vasya and Polynomial(数学)
- Codeforces 520E. Pluses everywhere 数学
- codeforces 520E Pluses everywhere (数学)
- Codeforces E. Qwerty78 Trip 【组合数学】
- codeforces #630 E. A rectangle 【数学】
- java内部类
- springboot自定义错误页面
- 利用文件流实现通讯录
- 【MySQL】存储引擎简介
- iOS数据类型简介及NSLog打印输出
- CodeForces 616E(数学规律)
- 算法——查找之二叉查找树
- RecyclerView数据源变化时遇到的问题
- 实战U盘装PE+kali_linux_persistence+OTG
- 使用python(pandas)将数据处理成交叉分组表
- TypeError: 'numpy.float64' object cannot be interpreted as an index
- C#封装
- gcc 参数说明
- JAVA内存释放机制