列表

详情


NC23616. 小A的数学题

描述

小A最近开始研究数论题了,这一次他随手写出来一个式子,,但是他发现他并不太会计算这个式子,你可以告诉他这个结果吗,答案可能会比较大,请模上1000000007。

输入描述

输出描述

示例1

输入:

2 2

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 8ms, 内存消耗: 996K, 提交时间: 2020-04-12 19:03:51

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int maxm=1e6+5;
int f[maxm];
signed main(){
    int n,m;cin>>n>>m;
    int k=min(n,m);
    int ans=0;
    for(int i=k;i>=1;i--){
        f[i]=(n/i)*(m/i);
        for(int j=i+i;j<=k;j+=i){
            f[i]-=f[j];
        }
        ans=(ans+f[i]*i%mod*i%mod)%mod;
    }
    cout<<ans<<endl;
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 1000K, 提交时间: 2020-03-25 22:38:46

#include<bits/stdc++.h>
using namespace std;
long long i,j,s=0,n,m,F[1000005]={0},mod=1e9+7;
int main()
{
	scanf("%lld%lld",&n,&m);
	if(n>m) swap(n,m);
	for(i=n;i>=1;i--)
	{
		F[i]=(n/i)*(m/i);
		for(j=2*i;j<=n;j+=i)
		F[i]-=F[j];
		F[i]%=mod,s=(s+F[i]*i*i)%mod;
	}
	printf("%lld\n",s);
	return 0;
 } 

上一题