- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到一个数字的质因数分解作为映射:std::map<int, int> m
,其中key是一个质数,value是这个质数在product中出现的次数。
示例:100 的质因数分解为 2 * 2 * 5 *5,所以 m[2] = 2
, 和 m[5] = 2
我的问题是,如果一个数是质因数分解(如上所示),我如何才能得到它的所有除数?
最佳答案
除数的数量等于每个素数的计数乘积加 1。
这是因为您可以通过多个嵌套循环遍历素数幂的所有组合来轻松恢复所有除数。每个循环都遍历单个素数的幂。
嵌套循环的不同迭代次数等于所有循环大小的乘积。每个循环的大小等于素数加一,因为您遍历 0, 1, 2, ..., PrimeCnt
的幂,它有 PrimeCnt + 1
个数.
例如 100 = 2 * 2 * 5 * 5
你有 m[2] = 2
和 m[5] = 2
,因此你想将 2 的所有幂与 5 的所有幂组合,即将 2^0 或 2^1 或 2^2(这里有 3 个幂)与 5^0 或 5^1 或 5^2(此处是 3 次幂),因此 3 次幂乘以 3 次幂得到 9。
这也可以通过下面的简单程序轻松验证,该程序首先计算所有除数作为 PrimeCnt + 1
的乘积,然后通过迭代计算所有除数来验证这一事实。
您可以轻松地将任意数字 n
和质数映射 m
放入下面的程序中以验证其他情况。
#include <iostream>
#include <map>
int main() {
int n = 100;
std::map<int, int> m = {{2, 2}, {5, 2}};
int c = 1;
for (auto [k, v]: m)
c *= v + 1;
std::cout << "Computed as product: " << c << std::endl;
int c2 = 0;
for (int i = 1; i <= n; ++i)
if (n % i == 0)
++c2;
std::cout << "Computed through iteration: " << c2 << std::endl;
}
输出:
Computed as product: 9
Computed through iteration: 9
关于c++ - 质因数分解的除数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74330255/
我遇到了一个问题,想要了解更多信息以及如何避免。我有这个代码 len :: (Num r ) => [a] -> r len [] = 0 len xs = 1 + len ( tail xs ) a
我知道如何找到给定整数(1 除外)的除数: let smallest_divisor n = let rec aux n i = if i 编辑添加:在平均情况下,第二种方法
这个问题已经有答案了: Why does integer division code give the wrong answer? [duplicate] (4 个回答) 已关闭去年。 在 Java
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26). scala> 1.0 / Doub
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
如何使用转换将数字列表除以 2?我以为这段代码可以做到,但它只将整个列表的数字 1 除以 2,所以我一定完全误解了这一点。有人能帮助我吗? :) list v(5, 1); list d; d.res
我目前正在研究如何使用各种现代处理器的快速单精度浮点倒数功能来计算基于定点 Newton-Raphson 迭代的 64 位无符号整数除法的起始近似值。它需要尽可能准确地计算 264/除数,其中初始近似
我是一名优秀的程序员,十分优秀!