1748: 【基础】分解质因数(1838)
内存限制:512 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:30
解决:12
题目描述
求出区间[a,b]中所有整数的质因数分解。
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
输入
输入两个整数a,b。
输出
每行输出一个数的分解,形如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; }