• Divisors


    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的话,则无视。。。。

    代码就不放出来了,大家自己写一下。

     

      

  • 相关阅读:
    计算机科学中最重要的32个算法
    趣事
    深度学习迷你地图
    物理学
    代数几何
    Node.js 文件系统
    Node.js 常用工具util包
    Node.js 全局对象
    favi.icon是什么?
    Node.js 路由
  • 原文地址:https://www.cnblogs.com/cutemush/p/16743454.html
Copyright © 2020-2023  润新知