公倍数问题(2024.03八级)

题目描述

(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值