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的结果即可。

Input

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

Output

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

Input示例

6

Output示例

3

题意:求余数之和题解:oies 
 1 #include <bits/stdc++.h>
 2 #define ll  __int64
 3 using namespace  std;
 4 ll mod=1000000007;
 5 ll ni=0;
 6 ll pow(ll a,ll b)
 7 {
 8     ll re=1;
 9     while(b)
10     {
11         if(b&1)
12             re=(re*a)%mod;
13         b>>=1;
14         a=(a*a)%mod;
15     }
16     return re;
17 }
18 ll sum(ll l,ll r)
19 {
20     return ((l+r)%mod)*((r-l+1)%mod)%mod*ni%mod;
21 }
22 int  main()
23 {
24      ni=pow(2ll,mod-2);
25     ll n,r,ans=0;
26     scanf("%I64d",&n);
27     for(int ll i=1;i<=n;i=r+1){
28         r=n/(n/i);
29         ans=(ans+(n/i)%mod*sum(i,r)%mod)%mod;
30     }
31     n%=mod;
32     printf("%I64d\n",(n*n%mod-ans+mod)%mod);
33     return 0;
34 }
时间: 2024-10-03 07:14:42

51nod 1225 数学的相关文章

51nod 1225 余数的和 数学

1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 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的结果

51nod 1138 连续整数的和(数学)

题目描述: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138 给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2).例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8.如果不能写为若干个连续整数的和,则输出No Solution. Input 输入1个数N(3 <= N <= 10^9). OutPut 输出连续整数中的第1个数,如果有多

51Nod 1003 阶乘后面0的数量(数学,思维题)

1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 Input示例 5 Output示例 1题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1003编程之美有讲:一个数 n

51nod 1087 1 10 100 1000(数学问题)

题目意思: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行1个数N.(1 <= N <= 10^9) Output 共T行,如果该位是0,输出0,如果该位是1,输出1. I

求N!的长度【数学】 51nod 1058

n!的长度等于log10(n!) 1 2 3 4 5 6 7 8 9 10 11 #include <bits/stdc++.h> using namespace std; int main() {     int n;     cin >> n;     double ans = 1;     for(int i = 1; i <= n; i++) {         ans += log10(i);     }     cout << (int)ans <

51nod 1040 最大公约数之和 (数学)

给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 Input 1个数N(N <= 10^9) OutPut 公约数之和 Input示例 6 Output示例 15 AC代码: /** *@xiaoran *1 2 3 4 5 6 *1 2 3 2 1 6 *2个1,2个2,1个3,1个6,注意后面的值都是n的因子. *现在我们只需要计算出各个因子的个数就行了, *那么1的个数是与n互质的

[51nod] 1305 Pairwise Sum and Divide 数学

有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum 给出数组A,由你来计算fun(A)的结果.例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4. Input 第1行:1

51nod B君的圆锥(数学)

题目链接: B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少. 注意圆锥的表面积包括底面和侧面. Input 一行一个整数,表示表面积S.(1 <= S <= 10^9) Output 一行一个实数,表示体积. Input示例 8 Output示例 1.504506 题意: 思路: 找打圆锥体积与表面积的关系,再找出体积的最大值就好了,可以发现当圆锥的底面积PI*r^2=S

51Nod 1087 1 10 100 1000 | 数学

Input示例 3 1 2 3 Output示例 1 1 0 #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 510 #define MOD 10 using namespace std; int main() { int n,t,m; scanf("%d",&t)