蓝桥杯 试题 基础练习 分解质因数

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  求出区间[a,b]中所有整数的质因数分解。
输入格式
  输入两个整数a,b。
输出格式
  每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=2
3
7=7
8=222
9=33
10=2
5
提示
  先筛出所有素数,然后再分解。
数据规模和约定
  2<=a<=b<=10000

思路:
1.找出2~b内所有素数
2.如果当前数是素数,输出;如果不是,在素数数组中早最小的,能被当前数整除的素数
3.递归进行上诉2操作,直到最后当前数可以在素数数组中找到为止

#include
#include
#include
#include
#include
#include
using namespace std;
bool IsPrime(int num){//判断是否为素数:采用6x-1和6x+1方法,即所有素数必须被6i-1或者6i+1整除 
	if(num==2 || num==3)return true;
	if((num+1)%6!=0&&(num-1)%6!=0)return false;
	int tmp = sqrt(num);//能够被因式分解,分解得到的因式肯定小于等于num开方
	for(int i=5;i<=tmp;i+=6){//在6i-1,6i,6i+1,6i+2,6i+3,6i+4这个循环中,因为即使能被6i-1,6i+1整除,也可能不是素数
								//所以当能被6i-1或者6i+1整除时,肯定为奇数,所以6i,6i+2,6i+4都不可能整除,6i+3能被
								//3整除,但是6i-1,6i+1肯定不能被3整除,所以num应该不可能被6i+3整除,所以如果num不时
								//素数,只能被6i-1或者6i+1整除 
		if(num%i==0||num%(i+2)==0)return false;
	} 
	return true;
}
string Devide(int num,vector& prime){
	if(!prime.empty()&&find(prime.begin(),prime.end(),num)!=prime.end()){
		string res = "";
		res.append(1,'*');//将数字转换成字符串
		stringstream ss;
		ss< &prime){
	if(!prime.empty()&&find(prime.begin(),prime.end(),num)!=prime.end()){
		cout<

你可能感兴趣的:(算法题)