《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;
}
相关推荐
橘子汽水1681 小时前
Leetcode 322 279 零钱兑换,完全平方数
算法·leetcode
kevin_kang1 小时前
第01章 VoiceAgent 的总体架构与完整流程
算法
Lintongzg1 小时前
KV-Cache 的显存账本:长上下文、并发与量化剪枝的取舍
算法·机器学习·剪枝
小孩玩什么2 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
jsjzsl22 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法
金金计较.2 小时前
Go语言-2
开发语言·算法·golang
计算机编程-吉哥2 小时前
基于机器学习的城市交通拥堵分析与预测平台【计算机毕业设计选题·机器学习·随机森林算法】
hadoop·算法·随机森林·机器学习·课程设计·计算机毕业设计选题·大数据毕业设计选题推荐
zyeyeye3 小时前
C++入门:从HelloWorld到命名空间揭秘
c语言·开发语言·c++·算法
牧羊人.3333 小时前
动手学深度学习 04 | Dataset 和 DataLoader、数据增强
人工智能·pytorch·深度学习·算法