7-1 分解质因数 (20 分)
求出区间[a,b]中所有整数的质因数分解。
输入格式:
输入两个整数a,b。数据规模和约定 2<=a<=b<=10000
输出格式:
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
输入样例:
在这里给出一组输入。例如:
3 10
输出样例:
在这里给出相应的输出。例如:
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
#include<stdio.h>
#include<math.h>
bool isprime(int p);
void getprime(int n);
int str[100];//存素数
int len=0;//计算长度
int main(void){
int min,max;
int i,j;
//输入范围
scanf("%d%d",&min,&max);
for(i=min;i<=max;i++){
//获取第i位的质因数结果
getprime(i);
//输出结果
printf("%d=",i);
for(int k=0;k<len;k++){
printf("%d",str[k]);
if(k!=len-1)
printf("*");
}
if(i!=max)
printf("\n");
//输出完一个数的素数因数 将长度len变0;
len=0;
//输出结束
}
}
//递归 获取素因数
void getprime(int n){
if(isprime(n)){
//如果该数为素数直接结束返回
str[len]=n;
len++;//str长度
return ;//这回递归结束
}
for(int i=2;i<=n;i++){
if(n%i==0&&isprime(i)){
str[len]=i;
len++;
n/=i;
getprime(n);
return;
}
}
}
bool isprime(int p){
int sq =sqrt(p);
if(p<=3)
return true;
for(int i=2;i<=sq;i++){
if(p%i==0)
return false;
}
return true;
}
头一回写博客,很荣幸大家浏览到我的代码,如果其中有不规范的地方,麻烦多多指教.