"LGOJ"分类平均
给定n和k(k≤100),将从 1 到 n 之间的所有正整数可以分为两类:A 类数可以被 k 整除(也就是说是k的倍数),而 B 类数不能.请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开.
按照传统的暴力思想我们不难想出:
for(int i = k; i <= n; i+=k) ans += i
但是我们可以进行一下优化
设A的的个数有c个,则
C=\lfloor \frac{n}{k}\rfloor
所以我们可以得到A类的和是:
k,1\times k,2\times k,...,C\times k
化简一下一下(提取公因数)
=\sum\limits_{n}^{i=1}i \tim