1748: 【基础】分解质因数(1838)

内存限制:512 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:30 解决:12

题目描述

求出区间[a,b]中所有整数的质因数分解。

提示

先筛出所有素数,然后再分解。

数据规模和约定

2<=a<=b<=10000

输入

输入两个整数ab

输出

每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...k也是从小到大的)(具体可看样例)

样例输入 复制

3 10

样例输出 复制

3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

提示

#include<bits/stdc++.h>
using namespace std;
int a,b;
int main(){
    cin>>a>>b;
    for(int i=a;i<=b;i++) {
    	int n=i,k=2;
    	bool first=true;
    	cout<<i<<"=";
        while(n!=1){
    	    if(n%k==0){
    		    n=n/k;
    		    if(!first) cout<<"*";
    		    cout<<k;
    		    if(first) first=false;
		    }else{
			    k++;
		    }
	    }
		cout<<endl;    	
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int Decomposition(int x, int a[]){
 //分解 x,数组a升序记录所有质数
 //函数值返回分解出来的质数数量
    int cnt=0;
    //在2~sqrt(x)的范围内找质因子 
    for(int i=2;i<=sqrt(x);i++){
    	//当i是x的因子时,i是质因子,从x中除掉i 
		while(x%i==0){
			a[++cnt]=i;
			x=x/i;
		} 
	}
	//如果最后x不是1,x也是质因子 
	if(x!=1) a[++cnt]=x;
    return cnt;
}
int main(){
    int m,n,a[110];
    cin>>m>>n;
    for(int i=m;i<=n;i++) {
    	int s=Decomposition(i,a);
    	cout<<i<<"="<<a[1];
    	for(int j=2;j<=s;j++) cout<<"*"<<a[j];
    	cout<<endl;
	}
	return 0;
}