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的形式。
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
- C++学习之分解质因数
- [C/C++] 分解质因数
- C语言分解质因数
- C分解质因数
- 【C语言】分解质因数
- c算法-分解质因数
- c语言:分解质因数
- C语言分解质因数
- C语言-分解质因数
- C语言-分解质因数
- 【c语言】分解质因数
- C语言 > 分解质因数
- 分解质因数之codeforces_588B
- 蓝桥杯之分解质因数
- 数据结构之分解质因数
- 算法学习之旅,初级篇(17)--质因数分解
- 分解质因数程序(C++)
- C语言实现分解质因数
- 1Activity+多Fragment遇到的问题及解决方案。
- maven
- 跨域传值精髓
- 一些常用的医学术语
- qsort和sort的区别
- C++学习之分解质因数
- 静态代码块(二)
- iOS cocos2d 学习第一章 cocos2d游戏引擎环境安装
- not in/not exists 的 null 陷阱
- eclipse 版本
- mac ide快捷键
- Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/10.2.0/db_1/jdk/j
- iOS开发 字符串处理
- JSTL标签库 fn标签