题目描述
(2024年03月GESP C++/Python 八级真题)小 A 写了一个N×M的矩阵A,我们看不到这个矩阵,但我们可以知道,其
中第i行第j列的元素Aij是i和j的公倍数(i=1,...,N,j=1,...,M)。现在有K个小朋友,其中第k个小朋友想知道,矩阵A中
最多有多少个元素可以是k(k=1,2,....,K)。请你帮助这些小朋友求解。
注意:每位小朋友的答案互不相关,例如,有些位置既可能是x,又可能是y,则它同可以时满足x,y两名小朋友的要求。
方便起见,你只需要输出
即可,其中ansk表示第k名小朋友感兴趣的答案。
输入
第一行三个正整数N,M,K。
输出
输出一行,即(抱歉,图片无法上传)。
请注意,这个数可能很大,使用 C++ 语言的选手请酌情使用 long long 等数据类型存储答案。
样例输入 Copy
2 5 2
样例输入 2
100 100 100
样例输出 Copy
9
样例输出 2
185233
提示
样例解释 1
只有A1,1可以是 1,其余都不行。
A1,1,A1,2,A2,1,A2,2都可以是2,而其余不行。
因此答案是1*1+2*4 = 9。
数据规模
对于30的测试点,保证N,M,K≤10;
对于60的测试点,保证N,M,K≤500;
对于100的测试点,保证N,M≤105, K≤106。
代码
#include <iostream>
using namespace std;
const int N=1e6+10;
int n,m,k,f[N],g[N];
void work(int N,int f[])
{
for(int i=1;i<=N;++i)
for(int j=i;j<=k;j+=i)
f[j]++;
}
int main()
{
cin>>n>>m>>k;
work(n, f);
work(m, g);
long long ans=0;
for(int i=1;i<=k;++i)
ans+=1LL*i*f[i]*g[i];
cout<<ans;
}