如何解析素数 C++ 的数倍数
how to parsing number multiple of prime numbers c++?
我是C ++的初学者,正在尝试学习算法。
我正在尝试创建一个控制台应用程序,该应用程序获取整数并解析质数的倍数。 例如,获取 12 并显示 3*2*2。
12 = 3*2*2。
但我对此有问题。我写了这样的东西。
int prime (int a){
int i ;
if ( a == 2 ){
return 1 ;
}
for (i=2; i < ((a/2)+1) ;i ++){
if (a%i == 0){
return 0;
}
}
return 1 ;
}
int main() {
int number;
int tmp;
//int primes[];
cout << "Enter a number:" << endl;
cin >> number;
tmp = number;
int i = 2;
for (i; i <= number ; i++){
if (prime(i)) {
tmp = number/i;
cout << tmp <<endl;
}
}
return 0;
}
我申请12的结果是:
6 4
2 1
1
但我想要质数的倍数,比如 3*2*2 表示 12。
我怎样才能更改我的代码来执行此操作....?!
TnX
我将省略"这可以做得更好"的问题。代码中有 3 个问题使其不正确:
- 你检查 i 是否是素数,但不检查它是否是除数。附加提示:检查分配给 tmp。
- 您输出的是商而不是潜在因子。
- 你会错过重复的因素。
在此代码中:
if (prime(i)) {
tmp = number/i;
cout << tmp << endl;
}
- 在任何时候,你都不会真正检查
number
是否真的可以被i
整除,你只是假设它是。 - 每个数字只处理一次,因此结果中不可能有多个
2
,就像您在示例中所做的那样。 - 打印除法的结果
i
,而不是打印i
本身。
我的建议,在伪代码中:
- 从 2 开始
- 检查每个数字 i 是否为
- 素数和
- 完美划分为目标数字
- 如果满足上述条件
- 实际上通过将目标数字除以 i 来更改目标数字
- 打印 i
- 对相同的数字 i 继续重复这些步骤,直到它不再可整除
当目标数字 - 达到 1(或您超过目标数字)时停止 - 如果它没有达到 1,那么您做错了什么。
- 创建素数数组,不要每次都计算它们。在创建数组时,仅检查素数上的除法,并执行到 sqrt(n) 。在这里你没有错误,只是它好多了。
- 检查 n 的素数除法器,对于当前素数 P,只有当 n 可以再除以 p 时,您才能转到下一个素数。
- 成功除以 p 后,更改该除法结果的检查编号。
相关文章:
- 继承函数的重载解析
- 基类中的函数名称解析
- 提升精神:解析布尔表达式并简化为规范范式
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 函数何时会在c++中包含stack_Unwind_Resume调用
- gcc和c++17的过载解析失败
- Python中的for循环与C++有何不同
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 构造函数和转换运算符之间的重载解析
- 未解析的外部符号_MsiLocateComponentW@12.
- '尝试解析可变参数模板时无法推断出'T的模板参数
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 如何在 cpp 中解析此文件?
- 在C++中使用 gRPC 时未解析的外部符号
- IDE (CLion) 无法解析C++模板类型
- 配置文件解析器仅返回以前的值
- 增强精神解析器规则以检测语句中的特殊结尾
- 将向量解析<string>为字符串
- 使用 jsoncpp 解析 json 数组字符串