51nod 1225 余数之和 (数论)整除分块

简介: 51nod 1225 余数之和 (数论)整除分块

F(n) = (n % 1) + (n % 2) + (n % 3) + … (n % n)。其中%表示Mod,也就是余数。

例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3。

给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果即可。

输入

输入1个数N(2 <= N <= 10^12)。

输出

输出F(n) Mod 1000000007的结果。

输入样例

6

输出样例

3


余数 = n - n/i*i


很显然n/i只会有n的因子个数那么多


而且n/i在连续的一段区间内都是一样的。


这个用一个等差序列去维护i就好了


然后就可以在sqrtn的复杂度解决这道题了。


注意爆long long

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
int main() {
  long long n, inv = 500000004;
  cin >> n;
  long long ans = (n % mod) * (n % mod) % mod;
  for (long long i = 1,j; i <= n; i = j + 1) {
    j = n/(n/i);
    ll x = n/i*(j + i)%mod;
    ll y = (j - i + 1)%mod * inv % mod;
    ans -= x * y;
    ans = (ans % mod + mod) % mod;
  }
  cout << ans << endl;
  return 0;
}
相关文章
|
7月前
|
算法 测试技术 C#
【数学】【数论】【最大公约数】1819. 序列中不同最大公约数的数目
【数学】【数论】【最大公约数】1819. 序列中不同最大公约数的数目
|
7月前
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
44 0
|
7月前
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
47 0
|
算法 C++
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
【每周一坑】​正整数分解质因数 +【解答】计算100以内质数之和
关于分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数只针对合数。
|
算法 C语言 C++
【数论】最大公约数、约数的个数与约数之和定理
先来科普下什么是约数:当a能被b整除,我们就说b为a的约数,b的倍数为a
138 0
|
人工智能
51nod 1624 取余最长路 (set 二分)
51nod 1624 取余最长路 (set 二分)
72 0
|
机器学习/深度学习 编解码 算法
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
235 0
RSA大作业 实现了 1.加、减、乘、除、移位、幂取模的高精度算法 2.利用快速幂和牛顿迭代法加速取模运算 3.中国剩余定理 4.Miller Rabin检测
算法--递归辗转相除法求最大公约数
算法--递归辗转相除法求最大公约数

热门文章

最新文章