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;
}
相关文章
斐波那契的整除(nefu 115)
已知斐波那契数列有如下递归定义:f1 = 1,f2 = 1,且对于n >= 3,有fn = fn-1 + fn-2,它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13,21,34…问fn的值是否能被 3 和 4 整除?
219 0
|
BI 人工智能
《剑指offer》-数组乘积,不使用除法
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。 这题不准用除法,那么就转化。
835 0
求一个数n次方后的末尾数(数论/快速幂)
hdu1061-Rightmost Digit hdu1097-A hard puzzle 这两个oj题目思路几乎一样,都是为了快速求出一个数n次方后的末尾数为都多少?
261 0
求一个数n次方后的末尾数(数论/快速幂)
|
算法 Python
除法取模与逆元/费马小定理
对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。 逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为。(都要求a和m互质)   推导过程如下(摘自Acdreamer博客) 这个为费马小定理,m为素数是费马小定理的前置条件。
1318 0
|
存储
A除于B(大数相除)
A除于B(大数相除)
95 0
|
9月前
|
存储
【力扣】2. 两数相加、445. 两数相加Ⅱ
【力扣】2. 两数相加、445. 两数相加Ⅱ
|
9月前
[leetcode 数位运算] 2939. 最大异或乘积 M
[leetcode 数位运算] 2939. 最大异或乘积 M

热门文章

最新文章