当前位置: 首页 > 知识库问答 >
问题:

有效地获取给定数字的所有除数

公羊俊德
2023-03-14

根据这个帖子,我们可以通过下面的代码得到一个数的所有约数。

for (int i = 1; i <= num; ++i){
    if (num % i == 0)
        cout << i << endl;
}

例如,数字24的除数是1 2 3 4 6 8 12 24

在搜索了一些相关的帖子后,我没有找到任何好的解决方案。有什么有效的方法来实现这一点吗?

我的解决方案:

  1. 通过这个解求出给定数的所有素因子
  2. 得到这些基本因子的所有可能组合

然而,这似乎不是一个好办法。

共有3个答案

宓昂雄
2023-03-14

到目前为止,在科学上还没有已知的算法复杂性(具有多项式复杂性的算法)的有效方法。所以像已经建议的那样迭代到平方根是最好的。

主要是因为这一点,目前使用的大部分加密算法都基于这样的假设,即计算任何给定整数的素因式分解都非常耗时。

訾高飞
2023-03-14

你真的应该检查到num的平方根为sqrt(num) * sqrt(num) = num:

这些线上的东西:

int square_root = (int) sqrt(num) + 1;
for (int i = 1; i < square_root; i++) { 
    if (num % i == 0&&i*i!=num)
        cout << i << num/i << endl;
    if (num % i == 0&&i*i==num)
        cout << i << '\n';
}
桓喜
2023-03-14

因素是成对的。<代码> 1 和<代码> 24 ,<代码> 2 和<代码> 12 ,<代码> 3 和<代码> 8 ,<代码> 4 和<代码> 6

您的算法的改进可能是迭代到num的平方根,而不是一直到num,然后使用num/i计算配对因子。

 类似资料:
  • 问题内容: 我正在为Android开发一个数学应用程序。在这些字段之一中,用户可以输入一个整数(无数字且大于0)。这个想法是获得所有可能的和,使之成为整数,而不加倍(在这种情况下为4 + 1 == 1 + 4)。唯一已知的是此int。 例如: 假设用户输入4,我希望该应用返回: 4 3 + 1 2 + 2 2 + 1 + 1 1 + 1 + 1 + 1 显然4 == 4,所以也应该加上。关于我应该

  • 问题内容: 我想从Elasticsearch集群中的完全匹配查询中获取所有结果。我不在乎结果是否是最新的,我不在乎订单,我只想稳定地浏览所有结果,然后从头开始。滚动和扫描最适合此操作,似乎不需要我拍摄快照就很受欢迎。我将要处理数以千万计的文档。 问题答案: 某种程度上与Elasticsearch查询重复,以返回所有记录。但是我们可以添加更多细节来解决开销问题。(即,“拍摄不需要的快照似乎有点受欢迎

  • 问题内容: 我正在尝试找到一种方法来显示所有可能的X整数集,这些X整数加起来就是一个给定的整数。例如,要获得所有2的整数集,得出5,我将拥有: 或3个整数组成6: 我只需要不包括0的整数,并且只需要处理一组中最多约15个和最多30个即可。数。 我什至不知道这是否有一个数学术语。我猜这类似于分解因子吗? 问题答案: 这是解决此问题的一种方法: 您可以像这样使用它。

  • 问题内容: 如何获取给定目录的所有子目录而没有文件(当前目录)或(父目录),然后使用函数中的每个目录? 问题答案: 您可以将glob()与选项一起使用 要么

  • 我有N个数字,让我们说。现在我想找出在给定范围内有多少对数字。(L和R给定)。数字对=两个数字相同。我的方法:

  • 如果我有数字,从,其中数字在两者之间缺失,那么我如何计算所有可能的数字,可以从这些数字的加法中形成(2/3/4/5/6...)。 例如,假设我有数字,即缺少和。现在,我可以形成 这是我需要找出的,这是我无法使用给定数字组合形成的1中的第一个数字。一个简单的逻辑就可以了。谢谢!