NC23616. 小A的数学题
描述
输入描述
输出描述
示例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; }