将任意正整数分解为素数之积
来源:互联网 发布:除甲醛公司有用吗 知乎 编辑:程序博客网 时间: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]中}
结束:
这个是自己写的,若有错误请见谅并指出,本人一定会认真修改。
- 将任意正整数分解为素数之积
- 将任意一个正整数n整数的立方分解为连续n个奇数之和
- 输入一个任意正整数,判断是否为素数
- 将一个数分解为素数乘积
- 将正整数分解质因数
- 将正整数分解质因数
- 将正整数分解质因数
- 将一个正整数分解为连续的自然数的和
- 将一个正整数分解为多个连续整数之和
- FOJ 1075假设x是一个正整数,它的值不超过65535(即1<x<=65535),将x分解为若干个素数的乘积。
- 面试总结:任意一个整数分解为几个连续正整数之和
- 任意输入20个正整数,找出其中的素数,并将这些素数按由小到大排序。要求:判断一个数是否为素数用函数实现:排序用函数实现
- 将一个正整数分解质因数
- 将一个正整数分解质因数
- 将一个正整数分解质因数
- 将一个正整数分解质因数
- 将一个正整数分解质因数
- 将一个正整数分解质因数
- CRF条件随机场简介
- 中国银行正式发布回收硬币价格表
- centOS防火墙中端口的开启和关闭
- tomcat:display-name,作用是登录到tomcat管理页面可以看到显示名字
- VS2008编译多种版本 文件问题
- 将任意正整数分解为素数之积
- java之Spring简单使用
- Oracle免客户端For .Net(精简方案)---ODP.net
- 解决JSP路径问题的方法(jsp文件开头path, basePath作用)
- android学习之通过handler更新UI的例子
- 编程之美 2013资格赛 传话游戏
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 +ORA-28056:Writing audit records to Windows Event Log faile
- ios 企业级app打包流程纪录
- MongoDB官方提供了更方便的Ubuntu下安装方法