如何解析素数 C++ 的数倍数

how to parsing number multiple of prime numbers c++?

本文关键字:C++ 何解析      更新时间:2023-10-16

我是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 个问题使其不正确:

  1. 你检查 i 是否是素数,但不检查它是否是除数。附加提示:检查分配给 tmp。
  2. 您输出的是商而不是潜在因子。
  3. 你会错过重复的因素。

在此代码中:

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 后,更改该除法结果的检查编号。