C++学习之分解质因数
2015-09-15 14:21
405 查看
一般地,对于一个大于1的非质数N,都可以分解成1~N之间质数相乘的形式,例如:
6=2*3;
30=2*3*5;
72=2*2*2*3*3;
......
特殊地,当N是质数时,则只能表示成N=1*N的形式。
本文就该形式的分解,给出了分解质因数的C++源代码:
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+1 count++; else { if(flag) //如果分解得到第一个质因数,则直接输出该质因数 { cout<<p[count]; flag=0; //让flag置0 } else cout<<'*'<<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); }
相关文章推荐
- C语言学习手记-一元二次函数解法
- C++ Primer Plus(第六版)--学习杂记(第三章)
- C++实现《面向对象之设计模式——单身模式》
- 程序调试VC++ 6.0
- loadrunner icrosoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”
- 为什么要用C++编写服务端程序?
- c/c++ 对于浮点型的判断
- 用C++品尝Vista美味:界面的毛玻璃效果——涨姿势
- C++基础知识总结-类的基本知识
- C语言link过程详解(多文件编译过程)
- C++程序设计实践题1
- c++builder6.0 mdi窗体+自定义子窗体
- C++如何返回函数指针
- qt4编译c++11文件
- C++中虚函数的实现原理
- C++程序中尽可能使用const
- 【C/C++学院】0804-C语言和设计模式(继承、封装、多态)
- 二进制值和十六进制字符串相互转换的C++代码
- c++ primer 学习笔记-第十四章
- C++ 预定义显示文件和行数的调试技术