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

来源:互联网 发布:除甲醛公司有用吗 知乎 编辑:程序博客网 时间:2024/04/28 10:45

题目:

        给出一个将任意正整数分解为素数之积的算法.用该算法将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]中}

结束:

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

原创粉丝点击