将任意正整数分解为素数之积

题目:

        给出一个将任意正整数分解为素数之积的算法.用该算法将12,123,1234,12345,……分解为素数之积。

方法:

       基本方法找到N的一个质因子,使N:=N/N的质因子,直到N为质数为止。

算法流程图:

算法代码:

//@pre Vnumber. |primePR[]|=down[log2(number)]+1 ∧ number>=2 ∧ number-down[number]=0
//@post Vi.0<i<=local_prime -> isPrime(primePR[i]) ∧ primePR[1]至primePR[local_prime]所有数的乘积=number ∧ primePR[0]=use_count(primePR[])=质因子的个数
void Number::core_getItsPrimeProduct(int primePR[],double number) const
{
    double copy_number=number;
    int local_prime=1;//用于记录存储下一个质因子位置
    int temp=static_cast<int>(std::sqrt(copy_number));
    double result_temp;
    while (temp!=1)
    {
        result_temp=copy_number/temp;
        if(result_temp-static_cast<int>(result_temp)==0)
        {
            int flag1=0,flag2=0;
            //@ temp>1 ∧ temp-down[temp]=0
            if (this->core_isPrime(temp))
            {
                primePR[local_prime]=temp;
                local_prime++;
                flag1=1;
            }
            //@ result_temp>1 ∧ result_temp-down[result_temp]=0
            if (this->core_isPrime(result_temp))
            {
                primePR[local_prime]=result_temp;    
                local_prime++;
                flag2=1;
            }
            if (flag1==1&&flag2==1)
            {
                break;//若除数和商都是质数则结束质数积分解
            }
            if (flag1==1)
            {
                copy_number=result_temp;//在两个不都是质数时 若除数为质数则将商继续分解 否则将除数继续分解
                temp=static_cast<int>(std::sqrt(copy_number));
                continue;//若在两个不都是质数时 跳过temp--继续执行while
            }
            else if(flag2==1)
            {
                copy_number=temp;
                temp=static_cast<int>(std::sqrt(copy_number));
                continue;//若在两个不都是质数时 跳过temp--继续执行while
            }
            //最后一种情况 若flag1和flag2都等于0,也就是分成两个合数的情况,这时什么都不做直到分到其中一个为质数为止
        }
        temp--;
    }
    if(local_prime==1)//当number本身为质数时不需分解
    {
        primePR[0]=1;
        primePR[1]=copy_number;
        return;
    }
    primePR[0]=local_prime-1;//将质因子的个数存入数组primePR[0]中

}

结束:

          这个是自己写的,若有错误请见谅并指出,本人一定会认真修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值