NC50418. 美味果冻
描述
输入描述
第一行输入一个整数 n。 1<=n<=3000000。
输出描述
输出一个整数表示答案。
示例1
输入:
3
输出:
22
C(clang 3.9) 解法, 执行用时: 329ms, 内存消耗: 376K, 提交时间: 2019-10-19 21:02:59
#include<stdio.h> typedef long long ll; const int mod=1e9+7; int main() { ll n,ans=0,l,r,k,i,j; scanf("%lld",&n); for(i=1;i<=n;i++){ for(j=1,k=i;i*j<=n;j++){ l=i*j; r=((i+1)*j-1)>n? n:((i+1)*j-1); ans=(ans+((l+r)*(r-l+1)>>1)%mod*k)%mod; k=(ll)k*i%mod; } } printf("%lld\n",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 464ms, 内存消耗: 384K, 提交时间: 2019-10-11 19:16:14
#include<bits/stdc++.h> using namespace std; #define ll long long #define P 1000000007 int n,ans,i,j,k,l,r; int main() { cin>>n; for(i=1;i<=n;i++)for(j=1,k=i;i*j<=n;j++,k=(ll)k*i%P) { l=i*j; r=min((i+1)*j-1,n); ans=(ans+((ll)(l+r)*(r-l+1)>>1)%P*k)%P; } cout<<ans<<endl; return 0; }
C++14(g++5.4) 解法, 执行用时: 508ms, 内存消耗: 612K, 提交时间: 2019-10-17 15:10:49
#include <bits/stdc++.h> #define ll long long using namespace std; const ll mod = 1e9+7; ll n; int main(){ scanf("%lld",&n);ll ans=0; for(ll i=1;i<=n;i++){ for(ll k=i,j=1;j*i<=n;j++,k=k*i%mod){ ll l=i*j; ll r=min((i+1)*j-1,n); ans=(ans+(l+r)*(r-l+1)/2%mod*k%mod)%mod; } } printf("%lld\n",ans); return 0; }