首页 > 代码库 > 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的结果即可。
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 }
51nod 1225 数学
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。