Divisors
给定 mmm 个不同的正整数 a1,a2,...,ama_1,a_2,...,a_ma1,a2,...,am
请对 000 到 mmm 每一个 kkk 计算,在区间 [1,n][1,n][1,n] 里有多少正整数是 aaa 中恰好 kkk 个数的约数。
输入格式
第一行包含两个正整数 n,mn,mn,m,分别表示区间范围以及 aaa 数组的大小。
第二行包含 mmm 个不同的正整数 a1,a2,...,ama_1,a_2,...,a_ma1,a2,...,am,表示 aaa 数组。
输出格式
输出 m+1m+1m+1 行,每行一个整数,其中第 iii 行输出 k=ik=ik=i 的答案。
输入样例 1
输入数据 1
10 3
4 6 7
输出数据 1
4
4
1
1
输入样例 2
输入数据 2
5 1
8
输出数据 2
2
3
数据范围与约定
测试点编号 mmm n,ain,ain,ai
1 = 5 ≤ 1000
2 = 50
3 = 200
4 = 1 ≤ 10^9
5
6
7 = 200
8
9
10
hint
对于1到10这10个数字
1充当了4,6,7中3个数字的约数
2充当了4,6,7中2个数字的约数
3充当了4,6,7中1个数字的约数
4充当了4,6,7中1个数字的约数
5充当了4,6,7中0个数字的约数
6充当了4,6,7中1个数字的约数
7充当了4,6,7中1个数字的约数
8充当了4,6,7中0个数字的约数
9充当了4,6,7中0个数字的约数
10充当了4,6,7中0个数字的约数
于是
有4个数字是[4,6,7]中0个数字的约数
有4个数字是[4,6,7]中某1个数字的约数
有1个数字是[4,6,7]中某2个数字的约数
有1个数字是[4,6,7]中某3个数字的约数
Sol
对输入 M个数字进行约数分解。
拿样例来说,3个数字分别为4 6 7
分解出来的约数为
1 2 4 1 2 3 6 1 7
此时我们需要对分离出来的这些约数进行统计,统计每个约数出现的次数
有以下三种方法
1:如果知道这些数字的范围,并且不太大的时候,可以使用桶排
即开一个整型数组num
num[i]=j代表数字i出现了j次
2:如果不知道数字的范围,可以使用map
3:可以使用以下方法
对这个数列进行升序排列得到
1 1 1 2 2 3 4 6 7
于是1出现3次,于是充当3个数字约数的个数++
2出现了2次,于是充当2个数字约数的个数++
3出现了1次,于是充当1个数字约数的个数++
4出现了1次,于是充当1个数字约数的个数++
6出现了1次,于是充当1个数字约数的个数++
7出现了1次,于是充当1个数字约数的个数++
N的值为10
于是有10-4-1-1=4个数字,没有充当任何一个输入数字的约数。
一个小trick是:
对于分解出来的约数,如果大于N的话,则无视。。。。
代码就不放出来了,大家自己写一下。