《P10263 [GESP202403 八级] 公倍数问题》

题目背景

对应的选择、判断题:试题 - GESP 202403 C++ 八级 - 洛谷有题

题目描述

小 A 写了一个 N×M 的矩阵 A,我们看不到这个矩阵,但我们可以知道,其中第 i 行第 j 列的元素 Ai,j​ 是 i 和 j 的公倍数(i=1,...,N,j=1,...,M)。现在有 K 个小朋友,其中第 k 个小朋友想知道,矩阵 A 中最多有多少个元素可以是 k(k=1,2,...,K)。请你帮助这些小朋友求解。

注意:每位小朋友的答案互不相关,例如,有些位置既可能是 x,又可能是 y,则它同时可以满足 x,y 两名小朋友的要求。

方便起见,你只需要输出 ∑k=1K​k×ansk​ 即可,其中 ansk​ 表示第 k 名小朋友感兴趣的答案。

输入格式

第一行三个正整数 N,M,K。

输出格式

输出一行,即 ∑k=1K​k×ansk​。

请注意,这个数可能很大,使用 C++ 语言的选手请酌情使用 long long 等数据类型存储答案。

输入输出样例

输入 #1复制

复制代码
2 5 2

输出 #1复制

复制代码
9

输入 #2复制

复制代码
100 100 100

输出 #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。

代码实现:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXK = 1e6 + 10;
int d[MAXK], e[MAXK];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N, M, K;
    cin >> N >> M >> K;
    for(int i = 1; i <= N; i++)
    {
        for(int k = i; k <= K; k += i)
        {
            d[k]++;
        }
    }
    for(int j = 1; j <= M; j++)
    {
        for(int k = j; k <= K; k += j)
        {
            e[k]++;
        }
    }
    ll ans = 0;
    for(int k = 1; k <= K; k++)
    {
        ans += 1LL * k * d[k] * e[k];
    }
    cout << ans << '\n';
    return 0;
}
相关推荐
小雉系统44 分钟前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
唐墨1235 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏6 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
通信小呆呆10 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落10 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black11 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_9679791213 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔13 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆14 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac