C++学习之分解质因数

来源:互联网 发布:怎么弄淘宝 编辑:程序博客网 时间:2024/06/06 03:57
一般地,对于一个大于1的非质数N,都可以分解成1~N之间质数相乘的形式,例如:
  6=2*3;
30=2*3*5;
72=2*2*2*3*3;
  ......
特殊地,当N是质数时,则只能表示成N=1*N的形式。

本文就该形式的分解,给出了分解质因数的C++源代码:

//分解质因数.cpp//功能:将一个整数分解为多个质数相乘//例子:480=2*2*2*2*3*5//日期:2015/09/15#include<iostream>#include<cmath>using namespace std;//判断是否为质数bool isPrime(int num){if(num<2){cout<<"Error!"<<endl;return false;}if(num==2 || num==3)return true;int N=sqrt(num);bool flag;for(int k=2;k<=N;k++){flag=1;if(num%k==0){flag=0;break;}}return flag;}//获取在2到sqrt(x)之间的质数的个数int getNumberOfPrime(int x){int count=0;for(int k=2;k<=x/2;k++)if(isPrime(k))count++;return count;}//将在2到sqrt(x)之间的质数保存在数组中int *savePrime(int x,int Num){int *p=new int[Num];//动态创建数组存放质数int count=0;for(int k=2;k<=x/2;k++){if(isPrime(k))p[count++]=k;}return p;}//分解质因数void solve(int x,int p[],int Num){cout<<x<<'=';if(isPrime(x))//如果是质数cout<<"1*"<<x;else{int count=0;//数组下标bool flag=1;//输出格式标志while(count<Num){if(x%p[count])//如果不能被整除,count=count+1count++;else{if(flag)//如果分解得到第一个质因数,则直接输出该质因数{cout<<p[count];flag=0;//让flag置0}elsecout<<'*'<<p[count];x/=p[count];//更新x}}}cout<<endl;}//主函数void main(){int x=1651650;//x为被分解的整数int Num=getNumberOfPrime(x);int *p=savePrime(x,Num);solve(x,p,Num);}


0 0
原创粉丝点击