E-枚举求和(2020年广东工业大学第十届文远知行杯新生程序设计竞赛)
这道题是一个很简单的枚举题:给定n,m,k求:
符号意义均为数学表达中的一般意义。
符号解释:为防止读不懂符号意义,做符号解释:
gcd(i,j)表示i与j的最大公因数。
表示的是k为gcd(i,j)的因子;
[ ]表示当[ ]内的命题为真,则结果为1,若为假,则为0;例如[ 这道题是一个很简单的枚举题 ]等于1
输入描述:
第一行输入一个t(1<=t<=100000);表示有t组输入数据
接下来的t行,每行输入n ,m,k;(1<=n,m,k<=1000000)
输出描述:
对于每一行输入数据,输出一个数表示求和后的答案;
输入
2
2 2 1
2 3 2
输出
4
1
解析
其实挺简单的,就是不知道啥叫因子。
一开始就真的信了题目的鬼话一个个枚举,结果tle了……
--假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。 需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立。反过来说,我们称n为m的倍数--
所以问题就变成了:有多少个i和j都是k的倍数。
所以直接输出(n/k)*(m/k)就行了。
还要注意数据类型,1e6*1e6用long long.
#include<iostream> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { long long n,m,k; scanf("%lld%lld%lld",&n,&m,&k); printf("%lld\n",(n/k)*(m/k)); } return 0; }