列表

详情


NC50418. 美味果冻

描述

 由于n越大jelly越美味,这里n<=3000000,只需求这个式子对1e9+7取模的值。

输入描述

第一行输入一个整数 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;
}

上一题