测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33258. 公倍数问题问题描述小 A 写了一个 N * M的矩阵 A ,我们看不到这个矩阵,但我们可以知道,其中第 i 行第 j 列的元素 Ai,j 是 i 和 j 的公倍数(i=1,2,,,,N; j=1,2,,,,M)。现在有 K 个小朋友,其中第 k 个小朋友想知道,矩阵 A 中最多有多少个元素可以是 k( k=1,2,,,,K )。请你帮助这些小朋友求解。注意:每位小朋友的答案互不相关,例如,有些位…

填空题 困难

题目描述

公倍数问题

问题描述

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

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

方便起见,你只需要输出 即可,其中 ans k表示第 k 名小朋友感兴趣的答案。

输入描述

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

输出描述

输出一行,即 。

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

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

样例输入 1

2    5    2

样例输出 1

9

样例解释 1

只有  A1,1 可以是 1,其余都不行。

 A1,1 ,  A1,2 ,  A2,1 ,  A22 都可以是 2,而其余不行。

因此答案是  1*1+2*4=9。

样例输入 2

100    100    100

样例输出 2

185233

数据规模

对于 30 的测试点,保证 N,M,K ≤ 10;

对于 60 的测试点,保证 N,M,K ≤ 500;

对于 100 的测试点,保证 N,M ≤ 100000,K ≤ 1000000 。

参考答案

def count_divisors(limit, num): s = [0] * (num + 1) for i in range(1, limit + 1): for j in range(i, num + 1, i): s[j] += 1 return s def main(): N, M, K = map(int, input().split()) s_N = count_divisors(N, 10 ** 6) s_M = count_divisors(M, 10 ** 6) result = 0 for k in range(1, K + 1): result += k * s_N[k] * s_M[k] print(result) if __name__ == "__main__": main()
上一题 下一题